Руководство по desktop-приложению: обзор продукта, скрипты, фаззинг JSON, мультиплексор
запросов и REST API для автоматизации (раздел ниже).
/
О приложении
Laitap — desktop API-клиент для Windows, macOS и Linux.
Отправляйте HTTP-запросы, собирайте коллекции, работайте в команде и публикуйте
документацию API — в духе Postman, но со своими возможностями.
Основные возможности
Коллекции и папки — структура запросов, переменные на уровне
коллекции и папок, наследование auth.
Раздел «Переменные» →
Импорт Postman — загрузка коллекций v2.x в приложение.
Фаззинг JSON — генерация «мусорных» и граничных вариантов тела
запроса для проверки устойчивости API.
Перейти к разделу Фаззинг JSON →
Мультиплексор (ковёр) — до 10 запросов параллельно или с задержкой;
ответы на одном экране плитками, красные — ошибки и 5xx.
Перейти к разделу Мультиплексор →
Снимок запроса (.snapshot) — один файл со всем контекстом бага:
URL, тело, переменные, auth, scripts, последний ответ.
Перейти к разделу Снимок →
Теги и умные папки
Теги на запросах — вкладка Tags в редакторе
запроса (#платёжка, #баг, #wip).
Умная папка — в контекстном меню коллекции или папки:
«Умная папка». Режим по тегам (любой / все) или по правилам:
код ответа, запуск за N дней, метод, URL, имя.
Правила по ответу работают после Send — сохраняются
lastStatusCode и lastRunAt на запросе.
Zero Knowledge шифрование
Для каждого workspace (личного или командного) можно включить
отдельное шифрование коллекций. Это режим Zero Knowledge:
сервер хранит только зашифрованные данные и не может прочитать содержимое без
вашего пароля.
Пароль vault создаётся и проверяется только на устройстве.
У каждого workspace свой пароль — личный и командные не связаны.
В команде шифрование включают владелец и
администраторы; участники разблокируют хранилище локально.
«Заблокировать» убирает ключ из памяти для выбранного workspace и скрывает его
коллекции до повторного ввода пароля.
Включить: Настройки → Приложение → Шифрование по workspace.
Потеря пароля означает потерю доступа к зашифрованным данным — восстановить
содержимое на сервере нельзя.
Переменные — пары «ключ → значение» для подстановки в URL, заголовки,
тело запроса и поля авторизации через синтаксис {{имя}}. В Laitap переменные
задаются на уровне коллекции и папок; вложенные папки
наследуют и переопределяют значения родителя.
Где задать
Коллекция — вкладка Variables в редакторе коллекции
(правый клик → Edit).
Папка — те же поля в редакторе папки; переменные папки
перекрывают одноимённые ключи коллекции для запросов внутри неё.
Скрипты — изменение во время выполнения через
pm.collectionVariables.set('key', 'value').
Раздел Scripts →
Поля переменной
Поле
Тип
Описание
key
string
Имя переменной. Используется в {{key}}. Пустые ключи игнорируются.
value
string
Значение для подстановки. Может содержать другие {{var}} — они
разрешаются после pre-request скриптов.
enabled
boolean
true (по умолчанию) — переменная участвует в подстановке.
false — отключена, как в Postman.
description
string
Произвольное описание для команды: назначение переменной, откуда брать значение,
ограничения. Отображается в таблице Variables в приложении; в REST API и при
публикации docs передаётся как метаданные.
Порядок разрешения
При отправке запроса итоговая карта переменных строится так:
Переменные коллекции (включённые строки).
Переменные каждой папки по пути от корня к запросу — последнее
значение побеждает.
Изменения из pre-request скриптов (через pm.collectionVariables).
Подстановка {{name}} выполняется после pre-request скриптов в URL,
query-параметрах, заголовках, raw/GraphQL теле и строковых полях auth (Bearer, Basic, API Key и др.).
Неразрешённые плейсхолдеры остаются как {{name}}.
API в скриптах
Объект pm.collectionVariables (алиасы: pm.variables,
pm.environment, pm.globals):
Метод
Описание
.get(key)
Текущее значение переменной или пустая строка.
.set(key, value)
Установить или обновить переменную для текущего запроса.
.has(key)
true, если ключ есть в карте (включая установленные в скрипте).
.unset(key)
Удалить переменную из карты текущего запроса.
REST API
В теле коллекции/папки поле variables — массив объектов с полями
key, value, enabled, description.
При публикации docs можно передать publishedVariables — безопасные значения
для читателей документации.
Схема REST API →
Фаззинг JSON — встроенный генератор вариантов тела запроса для
ручного тестирования API. Вы задаёте «эталонный» JSON, приложение по правилам
меняет отдельные поля на граничные и «плохие» значения. Без нейросетей: только
комбинаторика и заранее заданные мутации.
Кому полезно: QA и разработчикам, которые проверяют, как API
реагирует на пустые строки, огромные числа, null, бинарный мусор в
тексте, пустые массивы и прочий невалидный с точки зрения бизнес-логики ввод.
Где находится в приложении
Откройте запрос в коллекции или создайте новый.
Перейдите на вкладку Body.
Для REST: режим raw и тип JSON — панель
«Фаззинг JSON» появится над редактором тела.
Для GraphQL: панель находится над полем Variables (переменные
тоже должны быть валидным JSON).
Как работать: пошагово
Вставьте или напишите валидный JSON — тот, который обычно
отправляете на сервер (happy path).
Укажите количество вариантов (по умолчанию 10, максимум
50).
Нажмите «Сгенерировать N вариантов». Список появится под
панелью: для каждого варианта видны путь к полю ($.user.age),
описание мутации и превью JSON.
Нажмите «Применить» у нужного варианта — тело запроса
заменится на сгенерированное.
Нажмите Send и зафиксируйте код ответа, тело, время, ошибки
валидации.
Повторите для других вариантов из списка (или сгенерируйте список заново после
правки эталонного JSON).
Типичный сценарий тестировщика: один запрос в коллекции → 10 вариантов → 10
отправок с записью результатов в таблицу или в post-response скрипт.
Как устроена генерация
Приложение разбирает JSON как дерево и находит все изменяемые
узлы: числа, строки, массивы, объекты, null, булевы значения —
включая вложенные поля и элементы массивов.
Для каждого узла применяется фиксированный набор правил по
типу (см. таблицу ниже).
Каждый вариант — это копия исходного JSON с изменением
одного узла. Остальные поля остаются как в эталоне.
Из всех возможных мутаций выбирается до N вариантов с приоритетом
разнообразия по полям: сначала по одному варианту на разные
пути ($.name, $.count, …), чтобы не получить десять
мутаций одного и того же ключа.
Дубликаты с одинаковым телом отбрасываются.
Фаззинг не подставляет случайные байты и не
ломает синтаксис JSON — вы всегда отправляете синтаксически корректный JSON с
«плохими» значениями внутри. Для проверки битого JSON используйте ручное
редактирование тела.
Генератор находит пути вроде $.user.email, $.user.age,
$.items[0].sku, $.items[0].qty, а также сам массив
$.items и объект $.user. Мутации распределяются по
разным путям, чтобы за один прогон покрыть несколько полей.
Пример 3: GraphQL variables
На вкладке Body в режиме GraphQL эталон variables:
Фаззинг меняет, например, $.id на пустую строку или строку с
нулевыми байтами, а $.limit — на 0 или
999999. После «Применить» отправьте запрос с тем же query — меняются
только variables.
Чек-лист для тестировщика
Сервер возвращает 4xx с внятным сообщением, а не 500?
Валидация срабатывает на пустых строках и null?
Большие числа и длинные строки не кладут сервис (таймаут, OOM)?
Пустой массив / один элемент — ожидаемое поведение по спецификации?
Лишнее поле __fuzz игнорируется или отклоняется?
Кириллица и спецсимволы в строках обрабатываются корректно (кодировка)?
Ограничения
Нужен синтаксически валидный JSON до генерации (комментарии в стиле Postman поддерживаются при разборе).
Не более 50 вариантов за один клик.
Один вариант меняет одно поле/узел за раз (не полный combinatorial explosion всех полей сразу).
Режимы body form-data, x-www-form-urlencoded и binary не поддерживаются — только raw JSON и GraphQL variables.
Автоматическая отправка всех вариантов подряд пока не реализована: каждый вариант применяется и отправляется вручную (или через свой скрипт).
Связь с другими возможностями
Post-response Script — можно писать pm.test на код
ответа после каждого фазз-варианта.
Раздел Scripts →
Симуляция сети (вкладка Network) — комбинируйте с фаззингом,
чтобы проверять retry при плохом теле и обрыве соединения.
Примеры (Examples) — сохраняйте удачные/падающие варианты как
examples в коллекции для регрессии.
Мультиплексор запускает набор из 5–10 запросов одновременно (или с
паузой между стартами) и показывает все ответы на одном экране в виде плиток —
«ковёр». Удобно после деплоя: проверить health-check, auth, основные CRUD-эндпоинты
за один клик.
Отличие от Postman Runner: в Postman параллельный прогон коллекции
доступен только в платных планах; здесь параллельный запуск встроен и бесплатен.
Как открыть
В боковой панели коллекций откройте контекстное меню (ПКМ) на коллекции или папке.
Выберите «Мультиплексор (ковёр)».
В модальном окне появятся запросы из выбранной области (до 10 штук).
Настройка и запуск
Снимите галочки с запросов, которые не нужны в этом прогоне.
У каждого включённого запроса поле × N — сколько раз отправить его
за прогон (до 20). Например, × 8 на одном POST — восемь одинаковых
запросов параллельно, чтобы проверить гонки и идемпотентность на бэкенде.
Счётчик «Запусков» — сумма всех × N (максимум 50 HTTP за один ковёр).
Выберите режим: Параллельно — все стартуют сразу;
С задержкой — между стартами пауза (мс), удобно для rate-limit.
Нажмите «Запустить ковёр». Во время выполнения доступна кнопка «Остановить».
Чтение плиток
Зелёная — HTTP 2xx.
Жёлтая — редиректы и 4xx (запрос дошёл, но ответ «не OK»).
Красная — сеть/DNS/TLS, отмена, 5xx и прочие сбои.
На плитке: метод, имя запроса, код ответа, время, превью тела.
При повторе одного запроса на плитке виден номер #1, #2…
Что учитывается при отправке
Переменные коллекции и папок, auth, Pre-request Script на запросе и предках.
Настройки запроса (таймаут, редиректы, SSL) и вкладка Network (симуляция сети).
Каждый запрос идёт с отдельным clientRequestId — параллельные запросы не блокируют друг друга.
Типичные сценарии
Smoke-тест после деплоя: 8 health/auth/API эндпоинтов параллельно.
Проверка папки «Payments» с задержкой 200 мс между стартами.
Быстрый обзор: какие из сохранённых запросов сейчас отвечают 200.
Нагрузочный мини-тест: один эндпоинт × 10 параллельно — как сервер отвечает на дубли.
Снимок — полный слепок состояния запроса в одном файле
.snapshot. Нашли баг → сохранили снимок → отправили разработчику → он
открыл и видит ту же среду, что была у вас.
Отличие от Postman: там экспорт коллекции, окружения и переменных — отдельно.
В Laitap всё в одном файле, включая последний ответ и отличия от сохранённой версии в коллекции.
Где в приложении
В строке URL запроса кнопка Snapshot (рядом с Examples и Send).
Основной клик — сохранить; меню ▾ — «Сохранить» или «Открыть снимок…».
Запишите реальный трафик на Production через браузер, Fiddler, Charles или Wireshark —
импортируйте лог в Laitap и получите коллекцию: каждый HTTP-запрос с сохранённым ответом
(как Postman Example). Можно сразу повторять локально.
Горячая клавиша:Ctrl+Shift+O или кнопка
с иконкой сигнала в боковой панели коллекций.
Поддерживаемые форматы
.har — Chrome DevTools, Firefox, Charles (Export HAR), Fiddler Everywhere
.saz — Fiddler Classic (File → Save → All Sessions)
.chls / .chlsj — Charles Session (или экспорт HAR из Charles)
.pcap — Wireshark, только HTTP без TLS (HTTPS нужен HAR из прокси)
Как импортировать
File → Import Traffic Log… или кнопка в сайдбаре.
Выберите файл лога.
Коллекция создаётся с папками по хостам; у каждого запроса — example с телом ответа.
До 500 запросов за импорт; CONNECT и служебный трафик пропускаются.
Ограничения
Зашифрованный HTTPS из PCAP без ключей не восстанавливается — используйте HAR из прокси.
pcapng: экспортируйте HTTP как HAR или сохраните classic pcap.
Программный доступ к облачным коллекциям из CI/CD, скриптов или Postman.
В самом приложении Laitap облако и команды работают через обычный вход (JWT) —
и на free-тарифе, с лимитами. REST API ниже — отдельный канал для автоматизации:
нужна подписка PRO и API-ключ ltp_....
Pro
Сейчас бесплатно по заявке —
support@laitap.pro.
Укажите email аккаунта Laitap. Ключ вводится в
Настройки → Laitap PRO.
Создаётся в приложении Laitap → Настройки → API-ключи
Формат
JSON, UTF-8, Content-Type: application/json
Документация для нейросетей
Скачайте полную инструкцию для ИИ-ассистентов (ChatGPT, Claude, Cursor и др.):
эндпоинты, схемы данных, сценарии и правила. Передайте файл в контекст —
модель сможет генерировать запросы к API без ручного копирования страницы.
Для скриптов и автоматизации используйте API-ключ формата
ltp_... — создаётся в Laitap → Настройки → API-ключи
(нужна активная подписка PRO). Сессионный JWT входа в приложение для REST API
не предназначен: он обслуживает desktop-клиент и браузерную сессию.
Authorization: Bearer ltp_ваш_ключ_из_приложения
Личное облако
Только ваши коллекции (teamId = null). В приложении личное облако
доступно всем зарегистрированным пользователям (free — до 10 коллекций, PRO — до 100).
Через REST API ниже — только с API-ключом PRO. Подробнее —
Коллекции (личное).
Метод
Путь
Описание
GET
/collections
Список коллекций
GET
/collections?full=1
Все коллекции с полным содержимым
GET
/collections/{id}
Одна коллекция
POST
/collections
Создать коллекцию
POST
/collections/import
Импорт JSON
PUT
/collections/{id}
Обновить коллекцию
DELETE
/collections/{id}
Удалить (soft delete)
GET
/collections/{id}/share
Статус публикации docs
POST
/collections/{id}/share
Опубликовать / снять docs
Командные workspace
Команды, приглашения и командные коллекции доступны в приложении любому участнику
после входа (JWT). Лимиты зависят от тарифа владельца команды:
free — 1 созданная команда и до 7 участников; PRO — до 10 созданных команд
и до 100 участников в каждой. REST API команд (/api/teams/...) —
через API-ключ ltp_... с активной подпиской PRO у
владельца ключа. Подробнее — Коллекции (команда).
Метод
Путь
Описание
GET
/teams
Список ваших команд
POST
/teams
Создать команду
GET
/teams/{teamId}
Команда и участники
GET
/teams/{teamId}/members
Участники
POST
/teams/{teamId}/invites
Пригласить
GET
/teams/{teamId}/collections
Коллекции команды
PUT
/teams/{teamId}/collections/{id}
Обновить коллекцию
GET
/teams/invites/pending
Входящие приглашения
Структура данных коллекции
Коллекция — это дерево: корень → папки → запросы. Поддерживаются два формата тела
при создании и обновлении.
Формат A — поле data (Postman v2.1)
Универсальный формат для импорта и экспорта.
Схема объекта data
infoobjectoptional
Метаданные коллекции.
namestringoptional
Название внутри JSON.
descriptionstringoptional
Описание.
itemarrayoptional
Корневой массив папок и запросов.
Папкаobject
name (string), item (array) — вложенные элементы. Без поля request.
Запросobject
name (string), request (object) — method, url, header, body.
Методы: GET, POST, PUT, PATCH,
DELETE, HEAD, OPTIONS.
Переменные коллекции подставляются через {{name}}.
Коллекции — личное облако
Только личные коллекции (teamId = null). Командные — в разделе
Коллекции (команда).
Для REST API нужен API-ключ ltp_... (создаётся при подписке PRO).
В приложении то же облако доступно по JWT; free — 10 коллекций, PRO — 100.
Все запросы требуют заголовок Authorization: Bearer ltp_... и Content-Type: application/json для тел с JSON.
GET/api/collections
Список коллекций (краткий)
Метаданные без поля data. Подходит для списков и поиска.
Параметры запроса
pagequeryintegeroptional
Номер страницы. По умолчанию 1, минимум 1.
limitqueryintegeroptional
Записей на странице. По умолчанию 20, диапазон 1–100.
searchquerystringoptional
Фильтр по названию коллекции (подстрока, до 255 символов).
Лимиты: поле data — до 5 МБ, вложенность 20 уровней. Лимит коллекций в облаке зависит от тарифа (см. ответ limits при full=1).
Коллекции — командный workspace
Коллекции, привязанные к команде (teamId != null). В приложении
участники работают с ними после входа (JWT). Через
/api/collections/{id} их нельзя прочитать или изменить —
нужны оба id: команды и коллекции.
REST API: Authorization: Bearer ltp_... — ключ вашего аккаунта с активной
подпиской PRO. Права внутри команды зависят от роли (см. таблицу ниже).
PRO только для REST API: API-ключ создаётся при подписке PRO.
Участник команды без PRO по-прежнему может работать с командой в приложении;
для скриптов и CI ему нужен свой PRO и ключ.
Роли и права
Роль берётся из членства в команде (owner, admin, member).
Действие
member
admin
owner
GET список / versions
✓
✓
✓
POST — создать коллекцию
✓
✓
✓
PUT — редактировать
✓
✓
✓
DELETE — удалить
—
✓
✓
Публикация docs (/collections/{id}/share)
—
✓
✓
Включить шифрование vault команды
—
✓
✓
Нет членства в команде → 403. Коллекция не принадлежит указанному
teamId → 404.
Формат тела
Нативный формат Laitap (name, children, …) — см.
Структура данных. Postman-обёртка data здесь
не используется. Для ZK-коллекций — объект с
encrypted: true и encryptedPayload.
GET/api/teams
Список команд
Команды, в которых вы состоите. teamId нужен для запросов к коллекциям.
Безопасность: знание только collectionId без членства в команде
не даёт доступа. UUID чужой личной коллекции через командный API тоже не сработает —
коллекция должна иметь teamId, совпадающий с путём запроса.
Папки и запросы
Папки и запросы не имеют отдельных REST-эндпоинтов — они часть дерева коллекции.
Алгоритм один: получить коллекцию → изменить дерево → отправить PUT
с полным содержимым. Меняется только URL в зависимости от workspace.
Workspace
PUT
Формат тела
Кто может
Личное облако
PUT /api/collections/{id}
data (Postman) или children (native)
Владелец, PRO
Команда
PUT /api/teams/{teamId}/collections/{collectionId}
Только native (name, children, …)
Участник с ролью member+
Личное облако
PUT/api/collections/{id}
Обновить дерево (личная коллекция)
Параметры пути
idpathuuidrequired
UUID вашей личной коллекции.
Тело запроса
Передайте полное дерево — сервер заменяет содержимое целиком. Формат A или B (см. Структура данных).
databodyobjectoptional*
Postman v2.1. *Обязателен, если не передан native-формат (children / requests).
В команде используется тот же принцип, но другой URL и только native-формат
(children). Postman-обёртка data здесь не принимается.
Подробнее об эндпоинте — Коллекции (команда).
PUT/api/teams/{teamId}/collections/{collectionId}
Обновить дерево (коллекция команды)
Параметры пути
teamIdpathuuidrequired
UUID команды.
collectionIdpathuuidrequired
UUID коллекции в этой команде.
Тело запроса
Полное дерево в поле children. Роль member или выше.
Авторизация — API-ключ ltp_... (PRO).
namebodystringrequired
Название коллекции.
childrenbodyarrayrequired
Дерево папок и запросов (native). См. схему узлов ниже.
description, auth, variables, scriptsbodyoptional
Метаданные коллекции.
encryptedPayloadbodystringoptional
Для ZK-коллекций: зашифрованный blob вместо открытого children.
Типичный сценарий в команде
GET /api/teams/{teamId}/collections — загрузить все коллекции команды.
Найти нужную по id, изменить массив children (добавить папку или запрос).
PUT /api/teams/{teamId}/collections/{collectionId} — отправить обновлённое тело целиком.
Совет: для массовых изменений экспортируйте коллекцию из Laitap,
отредактируйте JSON и отправьте полный PUT — личное облако:
/api/collections/{id}, команда:
/api/teams/{teamId}/collections/{collectionId}.
Публикация документации
Опубликуйте коллекцию как интерактивную документацию на
laitap.pro/docs/{slug}.