Справочник HTTP API

REST-эндпоинты бэкенда: захваты, replay, сертификаты, скрипты, профили, канарейки.

Все маршруты находятся под /api. Dev-сервер Vite проксирует /api на http://127.0.0.1:8790; Electron запускает бэкенд на свободном loopback-порту.

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

Если задана переменная TRAFFIC_JAM_API_TOKEN, каждый запрос обязан нести её в заголовке X-Traffic-Jam-Token, иначе возвращается 401 (веб-фронтенд читает токен из VITE_TRAFFIC_JAM_API_TOKEN). Браузерные запросы дополнительно фильтруются по Origin: loopback-источники и traffic-jam://app разрешены всегда; дополнительные точные источники задаются через запятую в TRAFFIC_JAM_ALLOWED_ORIGINS — остальные получают 403.

Импорт захватов и сессии

МетодПутьНазначение
GET/api/healthРаботоспособность парсера/бэкенда
GET / PUT / PATCH / DELETE/api/foldersСписок / создание / переименование / удаление папок
POST/api/importИмпорт pcap/pcapng (multipart: pcap, опционально keylog, name, folderPath)
POST/api/import-harИмпорт HAR (multipart: har, name, folderPath)
GET/api/export-har/{sessionId}Скачать сессию как .har
GET/api/export-pcapng/{sessionId}Скачать .pcapng; при наличии editcap встраивает keylog
GET / DELETE/api/sessionsСписок всех / удаление всех сессий
GET / PATCH / DELETE/api/sessions/{id}Получить / переименовать или переместить (name, folderPath) / удалить одну
GET/api/live-capture/interfacesСписок интерфейсов захвата
GET / POST/api/live-capture/status / start / stopЖизненный цикл живого захвата (требуются mitmdump + tshark)

Ответы импорта содержат session, items, tlsFingerprints, tlsCertificates, stats, warnings. См. /docs/ru/capture/importing/.

Replay

МетодПутьНазначение
POST/api/replayПовторная отправка одного захваченного запроса
POST/api/replay-batchПоследовательный пакетный replay, не более 50 элементов
POST/api/replay-minimizeДельта-отладка полей запроса; прогресс стримится в NDJSON
POST/api/replay/fingerprint-reportСравнение TLS/заголовков «захват против replay», ничего не отправляет
GET/api/replay/transportsДоступные транспорты и профили отпечатков
GET/api/replay-history?limit=NИстория (лимит по умолчанию 100)
DELETE/api/replay-history/{id}Удалить одну запись
POST/api/replay-history/{id}/deriveПостроить сессию захвата из записи истории

POST /api/replay требует sessionId, requestId; опциональные переопределения: method, url, body, headerOverrides, removeHeaders, includeSensitiveValues, confirmMutation, confirmDestinationChange, timeoutSeconds.

transport: "native" (по умолчанию) или "utls" (ClientHello и порядок заголовков, точные по отпечатку). fingerprintProfile: "captured" восстанавливает hello сессии; пресеты берутся из GET /api/replay/transports. forceHttp1 понижает utls до HTTP/1.1; proxyUrl принимает http/https/socks5/socks5h (никогда не сохраняется); clientCertId привязывает сохранённый mTLS-сертификат ("auto" = привязка по хосту). См. /docs/ru/replay/workbench/, /docs/ru/replay/fingerprints/.

Ключевые поля ответа: status, headers, body, error, transport, fingerprintmismatches), rejectionClass, historyId.

Лимиты: тело запроса 16 МиБ, URL 16 КиБ, правки заголовков — 256 (64 КиБ на значение), предпросмотр ответа 4 МиБ, таймаут 30 с / максимум 120 с. Методы, изменяющие состояние (не GET/HEAD/OPTIONS), требуют confirmMutation: true; смена origin — confirmDestinationChange: true; без includeSensitiveValues учётные данные перед отправкой редактируются (маскируются).

Batch добавляет items[] (каждый с requestId и собственными переопределениями); headerOverrides пакета сливаются под поэлементными; пакеты выполняются последовательно (дедлайн: элементы × таймаут + 30 с). Minimize принимает options.statusMatch ("class"/"exact"), options.ignoreVolatile, options.maxTrials (по умолчанию 100, максимум 200).

Клиентские сертификаты

МетодПутьНазначение
GET / POST/api/client-certsСписок / загрузка (JSON: name, hosts[], pem или base64 p12 + password)
GET / DELETE/api/client-certs/{id}Метаданные / удаление

PEM обязан включать приватный ключ; лимит загрузки — 1 МиБ. Ответы отдают subject, issuer, notAfter, hasKey — никогда не отдают материал ключа. См. /docs/ru/replay/workbench/.

Профили отпечатков и канарейки

МетодПутьНазначение
GET / POST/api/fingerprint-profilesСписок / снимок из захвата (name, sessionId, requestId)
DELETE/api/fingerprint-profiles/{id}Удалить версию профиля
GET / POST/api/canariesСписок / создание или обновление канареечной проверки
DELETE/api/canaries/{id}Удалить канарейку
POST/api/canaries/{id}/runВыполнить один канареечный replay
GET/api/canaries/{id}/runsПоследние 50 запусков

Канарейка хранит sessionId, requestId, options replay и базовую линию (baselineStatus, baselineRejectionClass); запуск выставляет drifted: true с verdict, когда класс отказа меняется. См. /docs/ru/collector/profiles-canaries/.

Рецепты коллектора

МетодПутьНазначение
GET / POST/api/session-recipesСписок / сохранение рецептов сессии коллектора для активного проекта
DELETE/api/session-recipes/{id}Удалить один рецепт из активного проекта

Запись рецепта содержит id, name, проверенное непрозрачное поле data, createdAt и updatedAt. Размер ограничен 2 МиБ, а ID изолированы в пределах активного проекта. См. /docs/ru/api-re/security-map/.

Скрипты и конвейеры декодирования

МетодПутьНазначение
GET / POST/api/decode-scriptsСписок / сохранение JS-скриптов песочницы (name, source)
GET / DELETE/api/decode-scripts/{id}Получить / удалить один скрипт
GET / POST/api/decode-pipelinesСписок / сохранение конвейеров по эндпоинтам
GET / DELETE/api/decode-pipelines/{endpointKey}Получить / удалить по ключу эндпоинта

Поля конвейера: endpointKey, host, method, pathTemplate, requestModes[], responseModes[], protobufSchemaId. Встроенный скрипт groupib-packet (mangle/unmangle + CRC32) подгружается при старте. См. /docs/ru/collector/decode-scripts/.

Аннотации эндпоинтов и правила модели маршрутов

МетодПутьНазначение
GET / POST/api/endpoint-annotationsСписок / сохранение записей (endpointKey, status, tags[], notes)
DELETE/api/endpoint-annotations/{endpointKey}Удалить аннотацию
GET / POST/api/route-model-rulesСписок / сохранение правил моделирования каталога
GET / DELETE/api/route-model-rules/{id}Получить / удалить одно правило

Поля правила: name, enabled, priority, matchHost/matchMethod/matchPath, action, targetHost/targetMethod/targetPathTemplate/targetLabel. См. /docs/ru/api-re/catalog/, /docs/ru/security/investigations/.

Схемы protobuf и привязки

МетодПутьНазначение
GET / POST/api/protobuf-schemasСписок / сохранение (JSON name+content или multipart schemaFile)
DELETE/api/protobuf-schemas/{id}Удалить схему
GET / POST/api/protobuf-bindingsСписок / привязка типа сообщения к эндпоинту
GET / DELETE/api/protobuf-bindings/{id}Получить / удалить одну привязку

Поля привязки: schemaId, messageType, direction, endpointKey, host, method, pathTemplate, enabled. См. /docs/ru/api-re/protobuf/.

Mobile / Frida

МетодПутьНазначение
GET/api/mobile/android/statusСтатус инструментирования
GET/api/mobile/android/apps?deviceId=Список установленных приложений
POST/api/mobile/android/apps/extractИзвлечь APK (возвращает zip)
GET/api/mobile/android/frida/scriptsКаталог встроенных Frida-скриптов
POST/api/mobile/android/frida/startЗапустить захват + Frida (JSON или multipart; загрузка файлов сертификата/скрипта)
POST/api/mobile/android/frida/stopОстановить и импортировать захват как сессию

См. /docs/ru/capture/mobile/.

Классы отказов

Каждый ответ replay несёт rejectionClass, вычисленный из кода статуса (со сниффингом тела для mTLS-заглушки nginx на 400).

КлассЗначение
"" (пусто)2xx — принят
transport-errorСбой соединения/DNS/TLS
client-certificate-required400 с телом «No required SSL certificate»
unauthorized401
forbidden403
not-found404
rate-limited429
antifraud-reject451
redirect3xx
client-error / server-errorДругие 4xx / 5xx

[!WARNING] Replay, мутационные пробы и канареечные запуски отправляют реальные запросы в живые системы. Используйте их только против целей, которые вы авторизованы тестировать.

Документация Traffic Jam. Собрано с помощью Hugo.