Для чего каждый путь, что он принимает, что отвечает и каким отказом может ответить. Значок рядом с операцией говорит, отвечает ли на неё сборка, которую можно скачать сегодня.
GET /v1/status
Есть в выпущенной сборкеРаботает ли Liminal и вошёл ли в него кто-нибудь
Самый дешёвый вызов и тот, которым стоит ждать приложение. Отвечает и без аккаунта: ложный signedIn — это состояние, а не ошибка.
Параметры
Нет.
Ответ
{
"status": "running",
"version": "<version>",
"signedIn": true
}
Отказы
- 401 invalid_key — Ключ не передан, испорчен или с тех пор перевыпущен.
GET /v1/profiles
Есть в выпущенной сборкеПрофили каталога, с фильтрами и по страницам
Читает тот же каталог, который показывает приложение. Фильтры складываются, и каждый из них точный, кроме name: он подходит любому профилю, в имени которого встречается введённое, без учёта регистра.
Параметры
- pagequery · integer · необязательный · от 1 до 1000000 · по умолчанию 1
- Какую страницу читать, считая с первой.
- pageSizequery · integer · необязательный · от 1 до 100 · по умолчанию 100
- Сколько профилей на странице. Потолок равен значению по умолчанию.
- workspaceIdquery · string · необязательный
- Только профили этого рабочего пространства.
- folderIdquery · string · необязательный
- Только профили этой папки.
- statusquery · string · необязательный
- Только профили в этом состоянии; running — состояние открытого профиля.
- namequery · string · необязательный
- Только профили, в имени которых это встречается, без учёта регистра.
Ответ
{
"page": 1,
"pageSize": 100,
"total": 1,
"items": [
"<profile>"
]
}
Отказы
- 401 invalid_key — Ключ не передан, испорчен или с тех пор перевыпущен.
- 403 not_signed_in — В приложение никто не вошёл, а операциям каталога нужен аккаунт.
- 503 catalog_unavailable — Каталог профилей ещё не готов. Спросите снова.
- 400 invalid_pagination — page или pageSize вне допустимых границ.
GET /v1/profiles/{id}
Есть в выпущенной сборкеОдин профиль, с его прокси и отпечатком
Тот же объект, что возвращает список, но для одного идентификатора. Адрес прокси показан, пароль — никогда.
Параметры
- idpath · string · обязательный
- Идентификатор профиля — такой, каким его возвращают операции каталога.
Ответ
{
"id": "<profile-id>",
"name": "Shop EU",
"workspaceId": "<workspace-id>",
"folderId": "<folder-id>",
"status": "running",
"health": "ok",
"proxy": {
"id": "<proxy-id>",
"name": "Residential DE",
"type": "socks5",
"host": "proxy.example.net",
"port": 1080,
"working": true,
"lastCheckedExternalIp": "203.0.113.10",
"lastCheckedCountryCode": "DE"
},
"fingerprint": {
"platform": "MacIntel",
"language": "de-DE",
"timezone": "Europe/Berlin"
},
"lastOpenedAt": "2026-09-30T08:15:00.000Z"
}
Отказы
- 401 invalid_key — Ключ не передан, испорчен или с тех пор перевыпущен.
- 403 not_signed_in — В приложение никто не вошёл, а операциям каталога нужен аккаунт.
- 503 catalog_unavailable — Каталог профилей ещё не готов. Спросите снова.
- 404 profile_not_found — Профиля с таким идентификатором в каталоге нет.
POST /v1/profiles/{id}/start
Есть в выпущенной сборкеОткрыть профиль и получить адрес, к которому подключается драйвер
Запускает профиль так же, как это делает приложение — его отпечаток, его прокси, его cookies — и отвечает CDP-адресом, когда браузер поднялся. Вызов ждёт, а не возвращает задачу, которую надо опрашивать.
Параметры
- idpath · string · обязательный
- Идентификатор профиля — такой, каким его возвращают операции каталога.
- debugPortbody · integer · необязательный · от 1024 до 65534 · по умолчанию 0
- Порт, на котором поднимается CDP-endpoint. Ноль — приложение выберет свободный само; любое другое значение должно быть портом, который ваш пользователь может занять.
- timeoutSecondsbody · integer · необязательный · от 1 до 180 · по умолчанию 60
- Сколько вызов ждёт, пока профиль поднимется, прежде чем сдаться.
- maskAutomationbody · boolean · необязательный · по умолчанию true
- Принимается только true. Маскировку автоматизации выключить нельзя: профиль под скриптом — тот же профиль, который сайт видит, когда вы открываете его руками.
Ответ
{
"id": "<profile-id>",
"status": "running",
"cdpDiscoveryUrl": "http://127.0.0.1:48361/devtools/<token>/json/version",
"cdpBrowserUrl": "ws://127.0.0.1:9222/devtools/browser/<token>",
"seleniumDebuggerUrl": "127.0.0.1:9222",
"chromedriverPath": "/Applications/Liminal.app/.../chromedriver",
"debugPort": 9222,
"debugAddress": "127.0.0.1:9222",
"externalIp": "203.0.113.10",
"countryCode": "DE"
}
Отказы
- 401 invalid_key — Ключ не передан, испорчен или с тех пор перевыпущен.
- 403 not_signed_in — В приложение никто не вошёл, а операциям каталога нужен аккаунт.
- 503 runtime_unavailable — Приложение сейчас не может ни запустить, ни остановить профиль.
- 404 profile_not_found — Профиля с таким идентификатором в каталоге нет.
- 409 profile_already_running — Профиль уже открыт, его запуск ещё идёт или выданный раньше адрес драйвера всё ещё действует.
- 400 invalid_start_options — Тело запроса не JSON-объект.
- 400 invalid_port — debugPort не равен нулю и не попадает в допустимый диапазон.
- 400 invalid_start_timeout — timeoutSeconds вне допустимых границ.
- 400 masking_unavailable — maskAutomation пришёл как false, а такого режима у приложения нет.
- 409 port_in_use — Запрошенный отладочный порт занят.
- 409 listen_failed — Отладочный порт не удалось занять по другой причине.
- 409 start_failed — Профиль не поднялся. Когда приложение может это сказать, безопасное поле detail называет стадию.
- 409 proxy_unavailable — Профилю нужен его прокси, а прокси не ответил.
- 502 start_failed — Подготовка профиля не удалась ещё до того, как браузер попросили запуститься.
- 503 cdp_unavailable — Профиль запустился, но его CDP-endpoint не поднялся.
- 504 start_timeout — Профиль не поднялся за timeoutSeconds.
POST /v1/profiles/{id}/attach-automation
Есть в выпущенной сборкеПолучить адрес драйвера для уже открытого профиля
Для профиля, который вы открыли руками и теперь хотите вести скриптом. Ничего не перезапускает: сессия, её вкладки и cookies остаются как есть.
Параметры
- idpath · string · обязательный
- Идентификатор профиля — такой, каким его возвращают операции каталога.
- debugPortbody · integer · необязательный · от 1024 до 65534 · по умолчанию 0
- Порт, на котором поднимается CDP-endpoint. Ноль — приложение выберет свободный само; любое другое значение должно быть портом, который ваш пользователь может занять.
- timeoutSecondsbody · integer · необязательный · от 1 до 180 · по умолчанию 60
- Сколько вызов ждёт, пока профиль поднимется, прежде чем сдаться.
- maskAutomationbody · boolean · необязательный · по умолчанию true
- Принимается только true. Маскировку автоматизации выключить нельзя: профиль под скриптом — тот же профиль, который сайт видит, когда вы открываете его руками.
Ответ
{
"id": "<profile-id>",
"status": "running",
"cdpDiscoveryUrl": "http://127.0.0.1:48361/devtools/<token>/json/version",
"cdpBrowserUrl": "ws://127.0.0.1:9222/devtools/browser/<token>",
"seleniumDebuggerUrl": "127.0.0.1:9222",
"chromedriverPath": "/Applications/Liminal.app/.../chromedriver",
"debugPort": 9222,
"debugAddress": "127.0.0.1:9222",
"externalIp": "203.0.113.10",
"countryCode": "DE"
}
Отказы
- 401 invalid_key — Ключ не передан, испорчен или с тех пор перевыпущен.
- 403 not_signed_in — В приложение никто не вошёл, а операциям каталога нужен аккаунт.
- 503 runtime_unavailable — Приложение сейчас не может ни запустить, ни остановить профиль.
- 404 profile_not_found — Профиля с таким идентификатором в каталоге нет.
- 409 profile_already_running — Профиль уже открыт, его запуск ещё идёт или выданный раньше адрес драйвера всё ещё действует.
- 400 invalid_start_options — Тело запроса не JSON-объект.
- 400 invalid_port — debugPort не равен нулю и не попадает в допустимый диапазон.
- 400 invalid_start_timeout — timeoutSeconds вне допустимых границ.
- 400 masking_unavailable — maskAutomation пришёл как false, а такого режима у приложения нет.
- 409 port_in_use — Запрошенный отладочный порт занят.
- 409 listen_failed — Отладочный порт не удалось занять по другой причине.
- 409 start_failed — Профиль не поднялся. Когда приложение может это сказать, безопасное поле detail называет стадию.
- 409 proxy_unavailable — Профилю нужен его прокси, а прокси не ответил.
- 502 start_failed — Подготовка профиля не удалась ещё до того, как браузер попросили запуститься.
- 503 cdp_unavailable — Профиль запустился, но его CDP-endpoint не поднялся.
- 504 start_timeout — Профиль не поднялся за timeoutSeconds.
- 409 profile_not_running — Профиль не открыт, подключаться не к чему.
POST /v1/profiles/{id}/stop
Есть в выпущенной сборкеЗакрыть профиль так, как закрыло бы его окно
Даёт сессии дописать своё состояние. Это тот вызов, который стоит делать между прогонами скрипта на одном профиле.
Параметры
- idpath · string · обязательный
- Идентификатор профиля — такой, каким его возвращают операции каталога.
Ответ
{
"id": "<profile-id>",
"status": "closed"
}
Отказы
- 401 invalid_key — Ключ не передан, испорчен или с тех пор перевыпущен.
- 403 not_signed_in — В приложение никто не вошёл, а операциям каталога нужен аккаунт.
- 503 runtime_unavailable — Приложение сейчас не может ни запустить, ни остановить профиль.
- 404 profile_not_found — Профиля с таким идентификатором в каталоге нет.
- 409 profile_not_running — Профиль не открыт, закрывать нечего.
- 409 stop_failed — Приложение не смогло закрыть профиль.
POST /v1/profiles/{id}/force-stop
Есть в выпущенной сборкеЗакрыть профиль, который не закрывается
Тот же ответ, но без ожидания, пока сессия уляжется. Нужен, когда остановка не вернулась, а не по умолчанию.
Параметры
- idpath · string · обязательный
- Идентификатор профиля — такой, каким его возвращают операции каталога.
Ответ
{
"id": "<profile-id>",
"status": "closed"
}
Отказы
- 401 invalid_key — Ключ не передан, испорчен или с тех пор перевыпущен.
- 403 not_signed_in — В приложение никто не вошёл, а операциям каталога нужен аккаунт.
- 503 runtime_unavailable — Приложение сейчас не может ни запустить, ни остановить профиль.
- 404 profile_not_found — Профиля с таким идентификатором в каталоге нет.
- 409 profile_not_running — Профиль не открыт, закрывать нечего.
- 409 stop_failed — Приложение не смогло закрыть профиль.
GET /v1/running-profiles
Есть в выпущенной сборкеЧто открыто прямо сейчас и чем можно управлять
Каждый открытый профиль — окно его открыло или вызов, об этом говорит startedBy — с адресом драйвера, когда он есть. Отсюда скрипт переподключается после своего перезапуска.
Параметры
Нет.
Ответ
{
"items": [
{
"id": "<profile-id>",
"workspaceId": "<workspace-id>",
"status": "running",
"automationAvailable": true,
"startedBy": "api",
"cdpBrowserUrl": "ws://127.0.0.1:9222/devtools/browser/<token>",
"seleniumDebuggerUrl": "127.0.0.1:9222",
"chromedriverPath": "/Applications/Liminal.app/.../chromedriver",
"debugPort": 9222,
"debugAddress": "127.0.0.1:9222"
}
]
}
Отказы
- 401 invalid_key — Ключ не передан, испорчен или с тех пор перевыпущен.
- 403 not_signed_in — В приложение никто не вошёл, а операциям каталога нужен аккаунт.
- 503 catalog_unavailable — Каталог профилей ещё не готов. Спросите снова.