API Reference
HTTP API для интеграции M-TEH в любые приложения. Все эндпоинты принимают и возвращают JSON. Аутентификация через M-TEH Key в заголовке или теле запроса.
Аутентификация
Каждая интеграция имеет уникальный M-TEH Key вида nxs_....
Передавайте его в поле key тела запроса или в заголовке:
HeaderAuthorization: Bearer nxs_abc123...
M-TEH Key — это ключ интеграции, не провайдера AI. Ключи провайдеров (OpenAI, Claude и т.д.)
хранятся на сервере и клиенту не передаются.
POST /api/chat
Основной эндпоинт для отправки сообщений. Используется виджетом и прямыми интеграциями.
Запрос
POST /api/chat{
"key": "nxs_abc123...", // API Key виджета или AI-интеграции
"session": "nx-a1b2c3...", // ID сессии (уникальный per-user)
"message": "Ваш вопрос",
"pipeline_id": 5 // опционально — ID конкретного пайплайна
}
Ответ
200 OK{
"reply": "Ответ ассистента...",
"session": "nx-a1b2c3...",
"tokens": 42
}
Ошибки
| Код | Причина |
|---|---|
| 400 | Отсутствует обязательное поле (key или message) |
| 401 | Неверный или неактивный API Key |
| 404 | Пайплайн с указанным pipeline_id не найден |
| 429 | Превышен лимит запросов тарифного плана |
| 502 | Ошибка при запросе к AI-провайдеру |
POST /api/webhook/{key}
Запускает пайплайн с триггером типа trigger_webhook по входящему POST-запросу.
POST /api/webhook/nxs_abc123{
"event": "new_order",
"order_id": 12345,
"amount": 4990
}
Всё тело запроса доступно в переменных контекста как {{field_name}}.
200 OK{
"status": "ok",
"reply": "Заказ принят в обработку"
}
GET /api/sessions/{session_id}
Возвращает историю диалога для указанной сессии.
200 OK{
"session": "nx-a1b2c3...",
"messages": [
{"role": "user", "content": "Привет", "created_at": "2026-03-25T10:00:00Z"},
{"role": "assistant", "content": "Здравствуйте!", "created_at": "2026-03-25T10:00:01Z"}
]
}
Управление через API (REST)
Для управления интеграциями и пайплайнами из внешних систем используйте Bearer-аутентификацию с токеном пользователя (генерируется в настройках профиля):
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/v1/integrations | Список интеграций |
| POST | /api/v1/integrations | Создать интеграцию |
| GET | /api/v1/pipelines | Список пайплайнов |
| POST | /api/v1/pipelines | Создать пайплайн |
| GET | /api/v1/pipelines/{id}/stats | Статистика пайплайна |
| GET | /api/v1/pipelines/{id}/dialogs | Список диалогов |
Примеры использования
cURL
Shellcurl -X POST https://your-domain.com/api/chat \
-H "Content-Type: application/json" \
-d '{
"key": "nxs_abc123...",
"session": "user-42-session-1",
"message": "Какова стоимость доставки?"
}'
JavaScript (fetch)
JSconst res = await fetch('https://your-domain.com/api/chat', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
key: 'nxs_abc123...',
session: localStorage.getItem('nx_session') || crypto.randomUUID(),
message: userMessage
})
});
const { reply, session } = await res.json();
localStorage.setItem('nx_session', session);
Python
Pythonimport requests, uuid
resp = requests.post('https://your-domain.com/api/chat', json={
'key': 'nxs_abc123...',
'session': str(uuid.uuid4()),
'message': 'Помогите с выбором тарифа'
})
print(resp.json()['reply'])
Rate Limits
| Тариф | Запросов/мин | Запросов/месяц |
|---|---|---|
| Free | 10 | 500 |
| Starter | 60 | 10 000 |
| Pro | 300 | 100 000 |
| Enterprise | Без лимита | Без лимита |