Trektik
Документация

API Reference

193 endpoints. Все настоящие, все из бэкенда.

Base URL: https://api.trektik.ru

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

Есть два типа ключей: публичный (для SDK на сайте) и секретный (для сервера). Как ключ от подъезда и ключ от квартиры: первый можно дать всем, второй - только своим.

JWT (дашборд)

POST /auth/login → получить access_token

Authorization: Bearer <token>

API Key (SDK)

Публичный ключ. Для отправки событий, хитмапов, replay, гайдов, опросов.

X-API-Key: pk_...

Secret Key (сервер)

Для серверных запросов к Query API и Management API.

X-Secret-Key: sk_live_...

SCIM Bearer

Для SCIM 2.0 endpoints (автопровижнинг из IdP).

Authorization: Bearer <scim_token>

Rate Limiting

При превышении лимита: 429 Too Many Requests + Retry-After: 60. Лимит зависит от плана проекта.

Формат ошибок

{ "error": "project_id is required" }
400401403404409413429500503

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

Регистрация, вход, JWT-токены, двухфакторная аутентификация. Как замок на двери: сначала покажи ключ (логин/пароль), потом заходи.

POST/auth/registerPublic

Регистрация нового аккаунта

Создаёт аккаунт и сразу возвращает токены (автологин). Как записаться в библиотеку: заполнил анкету - получил читательский билет.

Request Body
{ "email": "user@example.com", "password": "secureP@ss123", "name": "Alex" }
Response
{ "access_token": "eyJ...", "refresh_token": "eyJ...", "account": { "id": 1, "email": "user@example.com", "name": "Alex" } }
curl
curl -X POST https://api.trektik.ru/auth/register \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","password":"secureP@ss123","name":"Alex"}'
POST/auth/loginPublic

Вход в аккаунт

Возвращает JWT-токены. Если включён 2FA, вернёт mfa_required: true - тогда используйте /auth/2fa/login.

Request Body
{ "email": "user@example.com", "password": "secureP@ss123" }
Response
{ "access_token": "eyJ...", "refresh_token": "eyJ...", "expires_in": 3600, "account": { "id": 1, "email": "user@example.com" } }
curl
curl -X POST https://api.trektik.ru/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","password":"secureP@ss123"}'
POST/auth/2fa/loginPublic

Вход с 2FA кодом

Завершает вход при включённом 2FA. Передайте mfa_token из /auth/login и 6-значный TOTP-код.

Request Body
{ "mfa_token": "mfa_abc123...", "code": "123456" }
Response
{ "access_token": "eyJ...", "refresh_token": "eyJ...", "expires_in": 3600, "account": { "id": 1 } }
POST/auth/refreshPublic

Обновить access_token

Когда access_token истёк, обменяйте refresh_token на новую пару токенов.

Request Body
{ "refresh_token": "eyJ..." }
Response
{ "access_token": "eyJ...", "refresh_token": "eyJ...", "expires_in": 3600 }
POST/auth/logoutPublic

Выход

Request Body
{ "refresh_token": "eyJ..." }
Response
{ "status": "ok" }
POST/auth/forgot-passwordPublic

Запрос сброса пароля

Всегда возвращает 200 - не раскрывает, существует ли email (безопасность).

Request Body
{ "email": "user@example.com" }
Response
{ "status": "ok" }
POST/auth/reset-passwordPublic

Сброс пароля по токену из email

Request Body
{ "token": "reset_token_from_email", "new_password": "newSecureP@ss456" }
Response
{ "status": "ok" }
POST/auth/verify-emailPublic

Подтверждение email по токену

Request Body
{ "token": "verify_token_from_email" }
Response
{ "status": "email_verified" }
POST/auth/2fa/enableJWT

Включить 2FA (получить TOTP secret)

Response
{ "secret": "JBSWY3DPEHPK3PXP", "qr_code": "otpauth://totp/Trektik:user@example.com?secret=..." }
POST/auth/2fa/verifyJWT

Подтвердить включение 2FA

Request Body
{ "secret": "JBSWY3DPEHPK3PXP", "code": "123456" }
Response
{ "status": "2fa_enabled" }
POST/auth/2fa/disableJWT

Отключить 2FA

Request Body
{ "password": "secureP@ss123" }
Response
{ "status": "2fa_disabled" }

Проекты

Проект = ваш сайт/приложение. Как папка: внутри лежат все события, дашборды, флаги. Один аккаунт - до 3 проектов (бесплатно).

GET/v1/projectsJWT

Список моих проектов

Response
{ "projects": [{ "id": 1, "name": "My App", "api_key": "pk_...", "timezone": "Europe/Moscow" }] }
POST/v1/projectsJWT

Создать проект

Request Body
{ "name": "My App", "timezone": "Europe/Moscow" }
Response
{ "project": { "id": 1, "name": "My App", "api_key": "pk_...", "secret_key": "sk_..." } }
curl
curl -X POST https://api.trektik.ru/v1/projects \
  -H "Authorization: Bearer eyJ..." \
  -H "Content-Type: application/json" \
  -d '{"name":"My App"}'
GET/v1/projects/{projectID}JWT

Получить проект по ID

Response
{ "project": { "id": 1, "name": "My App", "timezone": "Europe/Moscow", "session_timeout_min": 30 } }
PUT/v1/projects/{projectID}JWT

Обновить проект

Только admin или owner. Можно менять имя, таймзону, таймаут сессий.

Request Body
{ "name": "My App v2", "timezone": "UTC", "session_timeout_min": 60 }
Response
{ "project": { "id": 1, "name": "My App v2" } }
DELETE/v1/projects/{projectID}JWT

Удалить проект

Только owner. Мягкое удаление.

Response
{ "status": "deleted" }
POST/v1/projects/{projectID}/keys/rotateJWT

Ротация API-ключа

Старый ключ перестаёт работать. Только admin/owner.

Response
{ "api_key": "pk_new...", "status": "rotated" }

Приём событий

Как отправить письмо: кладёте данные в конверт (JSON), указываете адрес (API-ключ) и отправляете. Лимит: 64 KB на событие, 1000 событий в батче, 10 MB на запрос.

POST/v1/trackX-API-Key

Отправить одно событие

Обязательно: event_name + хотя бы user_id или device_id. Поддерживает дедупликацию по insert_id (24 часа).

Request Body
{
  "event_name": "page_view",
  "user_id": "user_123",
  "device_id": "dev_abc",
  "session_id": "sess_xyz",
  "timestamp": "2026-03-15T10:30:00Z",
  "insert_id": "uuid-for-dedup",
  "str_properties": { "page": "/pricing", "browser": "Chrome" },
  "num_properties": { "price": 29.99 },
  "experiments": { "new-checkout": "treatment" },
  "utm_source": "google",
  "page_url": "https://example.com/pricing",
  "referrer": "https://google.com",
  "platform": "web"
}
Response
{ "status": "ok" }
curl
curl -X POST https://api.trektik.ru/v1/track \
  -H "Content-Type: application/json" \
  -H "X-API-Key: pk_..." \
  -d '{"event_name":"page_view","user_id":"user_123","str_properties":{"page":"/home"}}'
POST/v1/batchX-API-Key

Пакетная отправка (до 1000 событий)

Тот же формат, что /v1/track, но массивом. Каждое событие валидируется отдельно - ошибки не блокируют остальные.

Request Body
{
  "events": [
    { "event_name": "page_view", "user_id": "u1", "str_properties": { "page": "/home" } },
    { "event_name": "click", "user_id": "u2", "str_properties": { "button": "cta" } }
  ]
}
Response
{ "status": "ok", "accepted": 2, "errors": [] }
curl
curl -X POST https://api.trektik.ru/v1/batch \
  -H "Content-Type: application/json" \
  -H "X-API-Key: pk_..." \
  -d '{"events":[{"event_name":"page_view","user_id":"u1"},{"event_name":"click","user_id":"u2"}]}'

Аналитика (Query)

Запросы к данным: события, воронки, удержание, пути пользователей, выручка. Все запросы проксируются в query-engine (ClickHouse).

POST/v1/query/eventsJWT

Запрос событий (основной аналитический отчёт)

Группировка по времени, свойствам. Метрики: count, uniques, avg, sum. До 2 group_by.

Request Body
{
  "project_id": 1,
  "events": [{ "name": "page_view" }],
  "date_range": { "start": "2026-03-01", "end": "2026-03-15" },
  "metric": "count",
  "interval": "day",
  "group_by": ["str_properties.page"]
}
curl
curl -X POST https://api.trektik.ru/v1/query/events \
  -H "Authorization: Bearer eyJ..." \
  -H "Content-Type: application/json" \
  -d '{"project_id":1,"events":[{"name":"page_view"}],"date_range":{"start":"2026-03-01","end":"2026-03-15"}}'
POST/v1/query/funnelsJWT

Воронки

Последовательность шагов: сколько пользователей дошли от шага A к шагу B.

POST/v1/query/funnels/usersJWT

Пользователи на каждом шаге воронки

POST/v1/query/retentionJWT

Удержание (retention)

Когортный анализ: сколько пользователей вернулось через N дней после первого визита.

POST/v1/query/retention/usersJWT

Пользователи в когортах retention

POST/v1/query/retention/compareJWT

Сравнение retention между сегментами

POST/v1/query/journeysJWT

Пути пользователей (User Journeys)

Санкей-диаграмма: куда пользователи идут после события A.

POST/v1/query/journeys/usersJWT

Пользователи в путях

POST/v1/query/journeys/compareJWT

Сравнение путей между сегментами

POST/v1/query/revenueJWT

Выручка (revenue analytics)

POST/v1/query/revenue/overviewJWT

Обзор выручки

POST/v1/query/revenue/ltvJWT

LTV пользователей

POST/v1/query/revenue/ltv/drilldownJWT

Детализация LTV

POST/v1/query/revenue/top-payersJWT

Топ плательщиков

POST/v1/query/experiments/resultsJWT

Результаты A/B-теста

Методы: fixed (обычный), cuped (CUPED), sequential, sequential_cuped.

POST/v1/query/experiments/sample-sizeJWT

Калькулятор размера выборки

GET/v1/query/experiments/{id}/sequential-historyJWT

История sequential-теста

POST/v1/segments/previewJWT

Предпросмотр сегмента (подсчёт пользователей)

GET/v1/data-qualityJWT

Качество данных (Data Quality)

GET/v1/users/searchJWT

Поиск пользователей

GET/v1/users/{id}JWT

Профиль пользователя

GET/v1/users/{id}/eventsJWT

События пользователя

Public Query API (Secret Key)

Те же аналитические запросы, но через Secret Key (для серверных интеграций, BI-инструментов). Передавайте X-Secret-Key в заголовке.

POST/v1/api/query/eventsX-Secret-Key

Запрос событий (через Secret Key)

curl
curl -X POST https://api.trektik.ru/v1/api/query/events \
  -H "X-Secret-Key: sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"project_id":1,"events":[{"name":"page_view"}],"date_range":{"start":"2026-03-01","end":"2026-03-15"}}'
POST/v1/api/query/funnelsX-Secret-Key

Воронки (Secret Key)

POST/v1/api/query/retentionX-Secret-Key

Удержание (Secret Key)

POST/v1/api/query/journeysX-Secret-Key

Пути (Secret Key)

POST/v1/api/query/revenueX-Secret-Key

Выручка (Secret Key)

GET/v1/api/data-qualityX-Secret-Key

Качество данных (Secret Key)

Сегменты

Сегмент = группа пользователей по правилам. Как фильтр: 'покупатели из Москвы, которые заходили за последние 7 дней'.

GET/v1/segmentsJWT

Список сегментов

Передайте project_id в query-параметре.

Response
{ "segments": [{ "id": 1, "name": "Active Users", "type": "behavioral", "rules": {...} }] }
POST/v1/segmentsJWT

Создать сегмент

Request Body
{ "project_id": 1, "name": "Active Buyers", "type": "behavioral", "rules": {...}, "is_dynamic": true }
GET/v1/segments/{id}JWT

Получить сегмент по ID

PUT/v1/segments/{id}JWT

Обновить сегмент

DELETE/v1/segments/{id}JWT

Удалить сегмент

Дашборды

Дашборд = страница с виджетами (графики, таблицы). Можно расшарить по ссылке (публичный доступ без авторизации).

GET/v1/dashboardsJWT

Список дашбордов

POST/v1/dashboardsJWT

Создать дашборд

Request Body
{ "project_id": 1, "name": "Marketing Dashboard", "description": "Weekly metrics" }
GET/v1/dashboards/{id}JWT

Получить дашборд (с виджетами)

PUT/v1/dashboards/{id}JWT

Обновить дашборд

DELETE/v1/dashboards/{id}JWT

Удалить дашборд

POST/v1/dashboards/{id}/shareJWT

Включить публичный доступ (получить share_token)

DELETE/v1/dashboards/{id}/shareJWT

Отключить публичный доступ

GET/v1/dashboards/{id}/widgetsJWT

Список виджетов

POST/v1/dashboards/{id}/widgetsJWT

Добавить виджет

PUT/v1/dashboards/{dashboardId}/widgets/{widgetId}JWT

Обновить виджет

DELETE/v1/dashboards/{dashboardId}/widgets/{widgetId}JWT

Удалить виджет

GET/v1/public/dashboards/{token}Public

Публичный дашборд (без авторизации)

Response
{ "dashboard": {...}, "widgets": [...] }

Feature Flags

Включай/выключай фичи без деплоя. Как выключатель света: щёлкнул - фича работает, щёлкнул ещё раз - выключилась.

GET/v1/flagsJWT

Список флагов

POST/v1/flagsJWT

Создать флаг

Request Body
{ "project_id": 1, "key": "new-checkout", "name": "New Checkout", "type": "boolean", "default_value": false }
GET/v1/flags/{id}JWT

Получить флаг

PUT/v1/flags/{id}JWT

Обновить флаг (название, правила, варианты, rollout %)

DELETE/v1/flags/{id}JWT

Удалить флаг

POST/v1/flags/{id}/toggleJWT

Вкл/выкл (toggle)

POST/v1/flags/{id}/killJWT

Kill Switch (экстренное выключение)

GET/v1/flags/{id}/historyJWT

История изменений флага

POST/v1/flags/evaluatePublic

Вычислить значение флага (для SDK)

Публичный endpoint. SDK отправляет project_id, flag_key, user_id - получает значение. Sticky bucket по SHA256.

Request Body
{ "project_id": 1, "flag_key": "new-checkout", "user_id": "user_123", "properties": { "plan": "pro" } }
Response
{ "flag_key": "new-checkout", "value": true, "variant": "" }
curl
curl -X POST https://api.trektik.ru/v1/flags/evaluate \
  -H "Content-Type: application/json" \
  -d '{"project_id":1,"flag_key":"new-checkout","user_id":"user_123"}'

A/B-тесты и эксперименты

A/B-тесты + Multi-Armed Bandit. Как научный эксперимент: делите пользователей на группы, показываете разные варианты, считаете статистику.

GET/v1/experimentsJWT

Список экспериментов

POST/v1/experimentsJWT

Создать эксперимент

Тип: ab_test или bandit. Минимум 2 варианта.

Request Body
{
  "project_id": 1, "key": "checkout-v2", "name": "Checkout V2",
  "primary_metric": "purchase", "experiment_type": "ab_test",
  "variants": [
    { "key": "control", "name": "Control", "weight": 50, "is_control": true },
    { "key": "treatment", "name": "Treatment", "weight": 50 }
  ]
}
GET/v1/experiments/{id}JWT

Получить эксперимент (с вариантами)

PUT/v1/experiments/{id}JWT

Обновить (только draft)

DELETE/v1/experiments/{id}JWT

Удалить

POST/v1/experiments/{id}/startJWT

Запустить

POST/v1/experiments/{id}/stopJWT

Приостановить

POST/v1/experiments/{id}/completeJWT

Завершить

GET/v1/experiments/{id}/assignJWT

Назначить вариант пользователю (sticky)

POST/v1/experiments/{id}/switch-strategyJWT

Переключить стратегию (ab_test <-> bandit)

GET/v1/experiments/{id}/bandit-stateJWT

Состояние бандита (веса вариантов)

GET/v1/experiments/{id}/bandit-historyJWT

История аллокаций бандита

Алерты

Уведомления при аномалиях. Как будильник: задайте условие - получите уведомление когда сработает.

GET/v1/alertsJWT

Список алертов

POST/v1/alertsJWT

Создать алерт

Типы: threshold (порог), anomaly (аномалия), segment_size (размер сегмента). До 5 на бесплатном плане.

Request Body
{
  "project_id": 1, "name": "Crash spike", "type": "threshold",
  "metric": "total", "event_name": "error", "condition": "gt",
  "threshold": 100, "window_minutes": 60, "channels": [{"type": "email"}]
}
GET/v1/alerts/{id}JWT

Получить алерт

PUT/v1/alerts/{id}JWT

Обновить алерт

DELETE/v1/alerts/{id}JWT

Удалить алерт

POST/v1/alerts/{id}/pauseJWT

Поставить на паузу

POST/v1/alerts/{id}/resumeJWT

Возобновить

GET/v1/alerts/{id}/triggersJWT

История срабатываний

POST/v1/alerts/{id}/testJWT

Тестовое уведомление

Session Replay

Запись и воспроизведение сессий пользователей. SDK записывает DOM-события, сервер хранит чанками.

POST/v1/replay/chunksX-API-Key

Сохранить чанк записи (SDK endpoint)

Аутентификация по API-ключу. Лимит: 2 MB на чанк.

Request Body
{ "session_id": "sess_abc", "chunk_index": 0, "events": [...], "user_id": "u1", "page_url": "https://example.com" }
Response
{ "status": "ok", "chunk_id": 1, "chunk_index": 0 }
GET/v1/replay/sessionsJWT

Список записанных сессий

GET/v1/replay/sessions/{session_id}/chunksJWT

Чанки сессии для воспроизведения

GET/v1/replay/storageJWT

Статистика хранилища

PUT/v1/replay/retentionJWT

Настроить политику хранения (до 90 дней)

Request Body
{ "project_id": 1, "retention_days": 30 }
POST/v1/replay/cleanupJWT

Запустить очистку вручную

Тепловые карты (Heatmaps)

Карты кликов, скролла и внимания. SDK отправляет события, дашборд показывает, куда пользователи кликают и докручивают.

POST/v1/heatmap/eventsX-API-Key

Отправить события хитмапа (SDK)

До 500 событий за запрос, 2 MB лимит. Типы: click, scroll, attention.

Request Body
{
  "events": [{
    "session_id": "sess_abc", "page_url": "https://example.com/pricing",
    "event_type": "click", "x": 500, "y": 300, "selector": ".cta-button",
    "viewport_w": 1920, "viewport_h": 1080
  }]
}
Response
{ "status": "ok", "accepted": 1 }
GET/v1/heatmap/dataJWT

Получить данные хитмапа

Query-параметры: project_id, page_url, type (click/scroll/attention), from, to, segment_id (опционально).

Response
{ "type": "click", "data": [{ "x": 500, "y": 300, "count": 42 }] }

Taxonomy (Tracking Plan)

Словарь событий: какие события разрешены, какие свойства у каждого. Strict-режим отклоняет неизвестные события.

GET/v1/taxonomy/eventsJWT

Список событий в таксономии

POST/v1/taxonomy/eventsJWT

Добавить событие в таксономию

Request Body
{
  "project_id": 1, "event_name": "purchase", "description": "User made a purchase",
  "category": "Conversion", "status": "active",
  "properties": [{ "name": "amount", "type": "number", "required": true }]
}
GET/v1/taxonomy/events/{id}JWT

Получить событие

PUT/v1/taxonomy/events/{id}JWT

Обновить событие

DELETE/v1/taxonomy/events/{id}JWT

Удалить событие

POST/v1/taxonomy/importJWT

Импорт таксономии (JSON)

GET/v1/taxonomy/exportJWT

Экспорт таксономии (JSON-файл)

GET/v1/taxonomy/settingsJWT

Настройки (normal/strict режим)

PUT/v1/taxonomy/settingsJWT

Изменить режим (normal/strict)

Request Body
{ "project_id": 1, "mode": "strict" }
GET/v1/taxonomy/historyJWT

История изменений таксономии

GET/v1/taxonomy/codegen/{lang}JWT

Сгенерировать типизированный SDK-код

Языки: typescript, python, go, swift, kotlin. Скачивается файл.

Экспорт данных

Выгрузка событий и пользователей в файл (ndjson, csv). Работает асинхронно: запускаете задачу, потом скачиваете файл.

POST/v1/export/eventsJWT

Экспорт событий

Request Body
{ "project_id": 1, "format": "ndjson", "date_from": "2026-03-01", "date_to": "2026-03-15" }
POST/v1/export/usersJWT

Экспорт пользователей

GET/v1/export/cohorts/{id}/usersJWT

Экспорт пользователей когорты (сегмента)

GET/v1/export/jobs/{id}JWT

Статус задачи экспорта

GET/v1/export/download/{id}JWT

Скачать файл экспорта

GET/v1/export/jobsJWT

Список задач экспорта

POST/v1/export/schedulesJWT

Создать расписание экспорта (daily/weekly)

Request Body
{ "project_id": 1, "type": "events", "frequency": "daily", "format": "ndjson" }
GET/v1/export/schedulesJWT

Список расписаний

DELETE/v1/export/schedules/{id}JWT

Удалить расписание

Приватность (GDPR / 152-ФЗ)

Удаление данных пользователя. Как в законе: пользователь попросил - вы удаляете все его данные из событий и сессий.

POST/v1/privacy/delete-userJWT

Запрос на удаление данных пользователя

Только admin/owner. Удаляет события и сессии из ClickHouse и PostgreSQL. Выполняется асинхронно (~5 мин).

Request Body
{ "project_id": 1, "user_id": "user_123" }
Response
{ "job_id": 42, "estimated_completion": "2026-03-17T12:05:00Z" }
GET/v1/privacy/delete-user/{job_id}JWT

Статус удаления

GET/v1/privacy/delete-userJWT

Список запросов на удаление

Webhooks

HTTP-уведомления о событиях. Как почтальон: когда что-то происходит (алерт сработал) - вам приходит POST-запрос.

POST/v1/webhooksJWT

Создать webhook

Request Body
{ "project_id": 1, "url": "https://example.com/webhook", "event_types": ["alert_triggered"] }
Response
{ "webhook": {...}, "secret": "whsec_..." }
GET/v1/webhooksJWT

Список вебхуков

PUT/v1/webhooks/{id}JWT

Обновить вебхук

DELETE/v1/webhooks/{id}JWT

Удалить вебхук

POST/v1/webhooks/{id}/testJWT

Отправить тестовый вебхук

GET/v1/webhooks/{id}/logsJWT

Логи доставки вебхука

GET/v1/webhooks/logsJWT

Все логи доставки по проекту

Гайды (In-App Guides)

Подсказки и туры внутри приложения. Создаёте гайд в дашборде, SDK показывает его пользователям на нужной странице.

POST/v1/guidesJWT

Создать гайд

GET/v1/guidesJWT

Список гайдов

GET/v1/guides/{id}JWT

Получить гайд

PUT/v1/guides/{id}JWT

Обновить гайд

DELETE/v1/guides/{id}JWT

Удалить гайд

POST/v1/guides/{id}/activateJWT

Активировать

POST/v1/guides/{id}/pauseJWT

Поставить на паузу

GET/v1/decide/guidesX-API-Key

Какие гайды показать пользователю (SDK)

POST/v1/guides/{id}/eventX-API-Key

Трекинг события гайда (view/click/dismiss)

Опросы (Surveys)

NPS, CSAT, опросы с произвольными вопросами. Создаёте в дашборде, SDK показывает на нужной странице, ответы собираются автоматически.

POST/v1/surveysJWT

Создать опрос

GET/v1/surveysJWT

Список опросов

GET/v1/surveys/{id}JWT

Получить опрос

PUT/v1/surveys/{id}JWT

Обновить опрос

DELETE/v1/surveys/{id}JWT

Удалить опрос

POST/v1/surveys/{id}/activateJWT

Активировать

POST/v1/surveys/{id}/pauseJWT

Поставить на паузу

GET/v1/surveys/{id}/resultsJWT

Результаты и ответы

GET/v1/decide/surveysX-API-Key

Какие опросы показать пользователю (SDK)

POST/v1/surveys/{id}/respondX-API-Key

Отправить ответ на опрос (SDK)

SSO (SAML 2.0)

Single Sign-On через корпоративный провайдер (Okta, Azure AD, Google Workspace). Настраиваете один раз - пользователи входят через свой IdP.

POST/v1/sso/configJWT

Создать/обновить SSO конфиг

Request Body
{ "project_id": 1, "provider": "okta", "sso_url": "https://example.okta.com/...", "entity_id": "...", "certificate": "-----BEGIN CERTIFICATE-----..." }
GET/v1/sso/configJWT

Получить SSO конфиг

DELETE/v1/sso/config/{id}JWT

Отключить SSO

GET/v1/sso/saml/metadataPublic

SP Metadata XML (публичный)

POST/v1/sso/saml/acsPublic

SAML Assertion Consumer Service (IdP -> SP)

GET/v1/sso/saml/loginPublic

Начать SAML-логин (редирект на IdP)

SCIM 2.0 (User Provisioning)

Автоматическое управление пользователями из корпоративного каталога. Когда в Okta добавляют сотрудника - он автоматически появляется в Trektik.

GET/scim/v2/ServiceProviderConfigSCIM Bearer

Конфигурация SCIM-провайдера

GET/scim/v2/SchemasSCIM Bearer

SCIM-схемы

GET/scim/v2/ResourceTypesSCIM Bearer

Типы ресурсов

GET/scim/v2/UsersSCIM Bearer

Список пользователей

GET/scim/v2/Users/{id}SCIM Bearer

Получить пользователя

POST/scim/v2/UsersSCIM Bearer

Создать пользователя

PUT/scim/v2/Users/{id}SCIM Bearer

Обновить пользователя (полная замена)

PATCH/scim/v2/Users/{id}SCIM Bearer

Частичное обновление

DELETE/scim/v2/Users/{id}SCIM Bearer

Деактивировать пользователя

POST/v1/scim/tokensJWT

Создать SCIM-токен (для настройки IdP)

GET/v1/scim/tokensJWT

Список SCIM-токенов

DELETE/v1/scim/tokens/{id}JWT

Удалить SCIM-токен

Роли и доступ (RBAC)

Кастомные роли + политики доступа к данным. Можно ограничить доступ до конкретного сегмента или типа событий.

POST/v1/rolesJWT

Создать кастомную роль

GET/v1/rolesJWT

Список ролей (встроенные + кастомные)

PUT/v1/roles/{id}JWT

Обновить роль

DELETE/v1/roles/{id}JWT

Удалить роль

POST/v1/roles/{id}/assignJWT

Назначить роль пользователю

GET/v1/permissionsJWT

Список всех доступных разрешений

POST/v1/data-accessJWT

Создать политику доступа к данным

GET/v1/data-accessJWT

Список политик доступа

PUT/v1/data-access/{id}JWT

Обновить политику

DELETE/v1/data-access/{id}JWT

Удалить политику

Аудит-лог

Кто, когда и что делал. Только для owner/admin. Фильтрация по действию, актору, дате.

GET/v1/audit-logJWT

Список записей аудит-лога

Query: project_id, action, actor_id, from, to, limit, offset.

Response
{ "entries": [...], "total": 150, "limit": 50, "offset": 0 }
GET/v1/audit-log/{id}JWT

Одна запись аудит-лога

CRM-интеграции

Подключение Bitrix24 и amoCRM. События из Trektik отправляются в CRM как сделки/контакты.

POST/v1/integrations/crmJWT

Создать CRM-интеграцию

Request Body
{ "project_id": 1, "crm_type": "bitrix24", "webhook_url": "https://your.bitrix24.ru/rest/..." }
GET/v1/integrations/crmJWT

Список CRM-интеграций

GET/v1/integrations/crm/{id}JWT

Получить интеграцию

PUT/v1/integrations/crm/{id}JWT

Обновить интеграцию

DELETE/v1/integrations/crm/{id}JWT

Удалить интеграцию

POST/v1/integrations/crm/{id}/testJWT

Проверить подключение

SQL-доступ (для BI)

Прямой SQL-доступ к ClickHouse для DataLens, Metabase и других BI-инструментов. Создаёт отдельный readonly-пользователь в ClickHouse.

POST/v1/integrations/sql-accessJWT

Создать SQL-пользователя

Request Body
{ "project_id": 1 }
GET/v1/integrations/sql-accessJWT

Список SQL-учёток

DELETE/v1/integrations/sql-access/{id}JWT

Отозвать доступ

POST/v1/integrations/sql-access/{id}/rotateJWT

Ротация пароля

Статус системы

Проверка здоровья всех компонентов: PostgreSQL, ClickHouse, Redis, Kafka. Публичный endpoint, без авторизации.

GET/v1/statusPublic

Статус всех сервисов

Response
{ "status": "healthy", "services": { "postgres": "ok", "clickhouse": "ok", "redis": "ok", "kafka": "ok" } }
curl
curl https://api.trektik.ru/v1/status
GET/healthzPublic

Healthcheck (для k8s)

Response
{ "status": "ok", "service": "api" }