Как включить
- Откройте Multiaccount и войдите в аккаунт с тарифом от 6 месяцев.
- Вкладка «Настройки» → поле «Порт API». По умолчанию 40080, как в примерах Сферы. Если этот порт занят (например, запущена сама Сфера), укажите другой, от 1024 до 65535.
- Нажмите «Включить». Рядом появится адрес API, например
http://127.0.0.1:40080. Порт запоминается, и при следующих запусках программы API включается сам.
Запросы отправляются из любого языка: Python, Node.js, Postman, curl. Тело запроса — JSON. Ключи и токены не нужны.
Быстрый старт
Схема всегда одна: создать или выбрать профиль, запустить его командой /sessions/start, получить debug_port и подключиться к браузеру по этому порту.
import requests
from playwright.sync_api import sync_playwright
API = "http://127.0.0.1:40080"
profile = requests.post(f"{API}/sessions/create_quick").json()
start = requests.post(f"{API}/sessions/start", json={"uuid": profile["uuid"]}).json()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(f"http://127.0.0.1:{start['debug_port']}")
page = browser.contexts[0].new_page()
page.goto("https://example.com")
print(page.title())
requests.post(f"{API}/sessions/stop", json={"uuid": profile["uuid"]})const puppeteer = require('puppeteer-core');
const API = 'http://127.0.0.1:40080';
// Часть команд отвечает пустым телом, поэтому JSON разбираем, только если он есть.
const post = (path, body = {}) =>
fetch(API + path, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) })
.then(r => r.text()).then(t => (t ? JSON.parse(t) : null));
(async () => {
const profile = await post('/sessions/create_quick');
const { debug_port } = await post('/sessions/start', { uuid: profile.uuid });
const browser = await puppeteer.connect({ browserURL: `http://127.0.0.1:${debug_port}`, defaultViewport: null });
const page = await browser.newPage();
await page.goto('https://example.com');
console.log(await page.title());
browser.disconnect();
await post('/sessions/stop', { uuid: profile.uuid });
})();from selenium import webdriver
from selenium.webdriver.chrome.service import Service
options = webdriver.ChromeOptions()
options.debugger_address = f"127.0.0.1:{debug_port}" # порт из /sessions/start
driver = webdriver.Chrome(service=Service("chromedriver.exe"), options=options)
driver.get("https://example.com")Для Selenium нужен chromedriver той же основной версии, что и браузер Multiaccount. Версию браузера показывает адрес http://127.0.0.1:<debug_port>/json/version; chromedriver для неё — на сайте Chrome for Testing. driver.quit() отключает Selenium, а браузер остаётся открытым: остановите профиль командой /sessions/stop.
Профили
uuid профиля — это его номер в Multiaccount, строкой: "68296437". Где в Сфере есть выбор между uuid и uuids, работают оба.
Статусы: stopped остановлен, running запущен кнопкой, automationRunning запущен через API, warmup идёт прогрев.
/sessions
Список профилей. Тело необязательное.
status | показать только профили с этим статусом |
|---|---|
proxy_info | true — добавить прокси каждого профиля |
[{"name":"Avito 5","proxy":{"ip":"p12345.clearproxy.ru","port":"8181","protocol":"http"},"status":"stopped","uuid":"56164867"},
{"name":"1","proxy":{"protocol":"direct"},"status":"automationRunning","uuid":"68296437"}]В JavaScript fetch не отправляет тело у GET. Чтобы отфильтровать по статусу, отберите профили из полного списка у себя или используйте библиотеку, которая это умеет (axios, http). Параметры в адресе (/sessions?status=stopped) программа не читает: такой запрос вернёт весь список.
/sessions/{uuid}
Подробности профиля: устройство, прокси, язык, часовой пояс, WebRTC.
{"device":{"browser_version":"156.0.8078.80","cpu":"8","mode":"common",
"noises":{"audio":"fake","canvas":"fake","clientRects":"direct","doNotTrack":"direct",
"mediaDevices":"fake","webgl":"fake","webglNoise":"fake","webgpu":"direct"},
"os":"windows","os_version":"10","ram":"8","screen":"2560x1440","type":"desktop",
"webgl":"NVIDIA, NVIDIA GeForce GTX 1060"},
"name":"Shop 12",
"proxy":{"connection":{"protocol":"http"},"geolocation":"RU (Russia)","language":"ru-RU",
"publicIp":"31.173.83.49","timezone":"Europe/Moscow: +0300"},
"status":"stopped","webrtc":{"state":true,"value":"adaptive"}}publicIp и geolocation — по последнему запуску или проверке прокси в этом сеансе программы.
/sessions/create_quick
Новые профили, как кнопкой «Создать профиль»: свой отпечаток у каждого и прокси из ваших прокси Multiaccount (как они раздаются — в разделе «Прокси»).
count | сколько создать, 1–1000 |
|---|
{"name":"Profile 8","uuid":"18745525"}[{"name":"Profile 9","uuid":"101065771"},
{"name":"Profile 10","uuid":"63048013"}]/sessions
или POST /sessions/deleteУдалить профили, как кнопкой «Удалить». Запущенный профиль сначала остановите, иначе ответ 409.
uuid или uuids | один профиль или список |
|---|
{"uuids":["101065771","63048013"]}Запуск и остановка
/sessions/start
Запустить профиль и получить порт для подключения. Ответ приходит, когда браузер готов. Перед запуском программа, как и кнопка ЗАПУСК, меняет IP мобильного прокси со ссылкой смены и проверяет, что прокси отвечает.
uuid | профиль |
|---|---|
debug_port | желаемый порт, 1024–65535. Если занят, берётся свободный: используйте порт из ответа |
disable_images | true — не загружать картинки |
chromium_args | дополнительные ключи Chromium одной строкой, например "--disable-notifications" |
allow_same_proxy | true — запустить, даже если этот прокси уже работает в другом профиле |
{"uuid":"18745525","debug_port":9333}{"debug_port":9333,"uuid":"18745525"}Уже запущенный профиль не перезапускается: в ответе порт его браузера.
/sessions/stop
Закрыть браузер. Ответ приходит, когда браузер закрылся, поэтому сразу после него профиль можно снова запускать. Если за 15 секунд браузер не закрылся, он завершается принудительно.
Если браузер закроет сам скрипт (browser.close() в Puppeteer) или человек крестиком окна, программа это увидит: статус станет stopped, куки и вкладки сохранятся, как при обычном закрытии. browser.close() в Playwright и driver.quit() в Selenium браузер не закрывают, а только отключают скрипт: профиль останавливают этой командой.
uuid или uuids | один профиль или список |
|---|
/sessions/force_stop
Завершить процесс браузера сразу, не дожидаясь закрытия вкладок. Для зависшего браузера.
/sessions/run_one_time
Создать и сразу запустить одноразовые профили. После остановки браузера профиль удаляется вместе со всеми данными, восстановить их нельзя.
count | сколько, 1–100 |
|---|---|
disable_images, chromium_args, allow_same_proxy | как у /sessions/start |
{"89261155":9225,"40490559":9226}/sessions/start_warmup
Прогрев: в отдельной вкладке по очереди открываются сайты, на каждом — ещё несколько переходов по его ссылкам. Если профиль не был запущен, браузер закроется после прогрева. Пока идёт прогрев, статус профиля warmup.
uuid | профиль |
|---|---|
urls | свой список адресов. Если не задан, берётся url_count популярных сайтов (поиск, новости, справочные), без маркетплейсов и соцсетей |
url_count | сколько сайтов, по умолчанию 7 |
time_per_url | секунд на каждой странице, по умолчанию 3 |
view_depth | сколько страниц смотреть на каждом сайте, по умолчанию 3 |
Прокси
Новые профили получают свои прокси
Профили из create_quick и run_one_time получают ваши купленные прокси Multiaccount поровну. Первым идёт прокси, на котором сейчас не работает ни один браузер. Среди таких выбирается тот, у которого меньше всего профилей. Если у вас 10 прокси и профилей на них ещё нет, 10 новых профилей получат по одному.
Ваши собственные прокси из списка в программе сами по себе не раздаются: вы можете держать их под определённые аккаунты. Такой прокси назначается явно, по номеру. Если купленных прокси нет, новый профиль создаётся без прокси.
Один прокси — один работающий браузер
Мобильный прокси меняет IP при каждом запуске профиля. Если на одном прокси работают два браузера, запуск второго меняет IP и первому, а сайты видят оба профиля с одного адреса. Поэтому запуск через API на прокси, который уже работает в другом профиле, получает отказ 409 с именем этого профиля:
{"error":"Прокси p12345.clearproxy.ru:8181 уже работает в профиле «Profile 6» (33854437): сайты свяжут профили по IP, а смена IP при запуске сменит её и там. Дайте профилю свой прокси (/sessions/connection) или передайте \"allow_same_proxy\": true"}Если общий прокси нужен намеренно, передайте "allow_same_proxy": true, как при согласии на вопрос кнопки ЗАПУСК.
/proxies
только в MultiaccountПрокси из списка программы. Логины и пароли не возвращаются.
[{"change_ip":true,"id":"337908","ip":"p12345.clearproxy.ru","name":"p12345.clearproxy.ru",
"port":"8181","profiles":3,"protocol":"http","running":1}]change_ip | можно менять IP |
|---|---|
profiles | сколько профилей с этим прокси |
running | сколько из них сейчас запущено |
/sessions/connection
Задать профилю прокси. У запущенного профиля новый прокси действует со следующего запуска.
{"uuid":"18745525","proxy_id":"337908"}{"uuid":"18745525","type":"socks5","ip":"45.12.0.7","port":1080,"login":"user","password":"pass"}{"uuid":"18745525","type":"http","ip":"45.12.0.7","port":8000,"login":"user","password":"pass",
"change_ip_url":"https://provider.example/api/changeip?key=..."}{"uuid":"18745525","type":"direct"}type | http, socks5, direct или notSet (оба — без прокси) |
|---|---|
login, password | необязательные: прокси без пароля тоже работают |
change_ip_url | ссылка продавца для смены IP. С ней IP меняется при каждом запуске профиля и по /sessions/change_ip |
{"uuid":"18745525"}/sessions/change_ip
только в MultiaccountСменить IP прокси профиля сейчас, как кнопкой в строке профиля. Новый IP появляется через несколько секунд.
{"message":"IP скоро изменится","uuid":"18745525"}Если свободных IP у продавца нет, ответ 502 с его текстом, например «Не нашли свободный IP, попробуйте через несколько минут».
/sessions/check_proxy
Проверить, что прокси профиля работает, и узнать выходной IP. Результат виден и в строке профиля в программе.
uuid или uuids | для списка ответ — массив |
|---|
{"ip":"31.173.83.49","result":"Success",
"timezone":"Europe/Moscow","uuid":"18745525"}{"error":"Прокси не отвечает",
"result":"Failed","uuid":"18745525"}Настройки профиля
Отпечаток, язык, часовой пояс и user-agent меняются только у остановленного профиля, как в окне программы. Если профиль запущен или открыт в окне настроек, ответ 409.
/sessions/set_name
uuid, name | новое имя. Ответ — пустое тело |
|---|
/sessions/set_description
uuid, description | поле «Примечание». Ответ — пустое тело |
|---|
/sessions/geo
timezone | часовой пояс, например Europe/Berlin; auto — по IP прокси |
|---|---|
language | языки браузера, например "de-DE,de;q=0.9,en;q=0.8" |
latitude, longitude | сохраняются в поле «Геолокация» профиля |
{"uuid":"18745525","timezone":"Europe/Berlin","language":"de-DE,de;q=0.9,en;q=0.8"}/sessions/set_fingerprints
gpu | видеокарта из списка программы, например "NVIDIA, GeForce GTX 1060" |
|---|---|
ram, cpu_cores | память в ГБ и число ядер |
canvas, webgl, media_devices | fake — подменять, direct — настоящие значения |
browser | только chrome |
audio, webgpu и client_rects из скриптов Сферы принимаются без ошибки, но ничего не меняют. Ответ — пустое тело.
/sessions/set_useragent
Подходит только user-agent Chrome для Windows 10/11 (Windows NT 10.0; Win64; x64): остальной отпечаток профиля — такой же Chrome, и другая система в одной строке выдала бы подмену. Версию Chrome программа ставит по встроенному браузеру.
/sessions/set_misc
restore_open_tabs | открывать вкладки прошлого сеанса при запуске (и кнопкой тоже) |
|---|---|
disable_images | не загружать картинки во всех запусках профиля |
Остальные флаги Сферы принимаются без ошибки и пропускаются. Ответ — пустое тело.
Куки
/sessions/import_cookies
Добавить куки в профиль. Запущенному профилю они ставятся сразу, остановленному — при следующем запуске.
json | список кук в формате расширений браузера (как у Сферы): domain, name, value, path, secure, httpOnly, sameSite, expirationDate… |
|---|---|
file_path | полный путь к файлу на этом компьютере, например "C:\\cookies.txt": такой же JSON или cookies.txt (формат Netscape). Файл программа читает сама, загружать его в запросе не нужно |
/sessions/export_cookies
Сохранить куки профилей в папку, по файлу на профиль. folder_path — полный путь к существующей папке. Работает и у запущенного профиля.
{"uuids":["18745525"],"folder_path":"C:\\Cookies"}[{"cookie_path":"C:\\Cookies\\Shop 12_02-11-2026.txt",
"uuid":"18745525"}]Журнал действий
/sessions/actionlog
Последние 100 действий с профилем, от новых к старым: запуски, остановки, правки, смена прокси, куки, прогрев. Записывает и кнопки программы, и API.
uuid | профиль |
|---|---|
limit, offset | сколько записей и с какой, по умолчанию 50 и 0 |
action_types | номера действий через запятую: 0 Start, 1 Stop, 2 Edit, 3 ChangeProxy, 5 ImportCookies, 6 ExportCookies, 8 Warmup, 12 ChangeDescription, 13 ForceStop |
from_time, to_time | время в секундах Unix |
user_email | действия только этого аккаунта |
{"actions":[{"action":13,"action_name":"ForceStop","data":{},"id":"4980ed66-69bf-40e5-9328-3669b4808e3b",
"timestamp":1793626511,"user_email":"you@example.com"}],
"offset":0,"returned_count":1,"session_name":"Shop 12","session_uuid":"18745525","total_count":3}Аккаунт и программа
/auth/signin
Войти в аккаунт, как кнопкой «Войти». Работает и без входа. С этим аккаунтом на другом компьютере произойдёт выход, как при обычном входе.
{"email":"you@example.com","password":"..."}{"message":"Signed in successfully"}/auth/signout
Выйти из аккаунта. Все браузеры закрываются. Ответ — пустое тело.
/auth/close
Закрыть программу вместе с браузерами. Программа выходит через полсекунды после ответа.
Совместимость со Сферой
Рабочих столов, команд и пресетов в Multiaccount нет: все профили в одном списке. Чтобы скрипты Сферы не ломались, эти команды отвечают одним вариантом по умолчанию.
| Команда | Ответ Multiaccount |
|---|---|
| GET /providers | один пресет «Default provider» |
| POST /providers | выбрать его можно, другой — 404 |
| GET /desktops, POST /desktops | один рабочий стол «Desktop» |
| GET /teams | пустой список |
| POST /desktops/unlock_stopped_sessions | список остановленных профилей с "isLocked":"false" |
| POST /app/optimize_storage | 200, ничего не делает |
| POST /app/api_threads_count/{n} | 200, ничего не делает: число одновременных запросов программа не ограничивает |
| POST /sessions/share | 501: передачи профиля по почте нет, используйте экспорт профиля |
| PUT /desktops, DELETE /desktops, DELETE /providers | 501 |
Ошибки
При ошибке API отвечает JSON с текстом, что не так и как исправить: {"error": "..."}.
| Код | Когда |
|---|---|
| 400 | нет обязательного поля или неверное значение |
| 401 | не выполнен вход в аккаунт |
| 402 | при входе: тариф не оплачен |
| 403 | тариф меньше 6 месяцев или запрос пришёл со страницы сайта |
| 404 | нет такого профиля, прокси или команды |
| 409 | профиль запущен или открыт в окне настроек; прокси уже работает в другом профиле |
| 500 | браузер не запустился, в тексте причина (например, прокси не отвечает) |
| 501 | такой возможности в Multiaccount нет |
| 502 | ошибка от сервера смены IP или сервера входа |
| 503 | нет связи с сервером Multiaccount |
| 504 | браузер не поднялся за 2 минуты |
Ограничения
- Запуск без окна (
"headless": true) и подмена Referer (referrer_values) пока не поддерживаются: ответ 501. Запускайте с"headless": falseили без этого поля. - В
chromium_argsнельзя передать ключи, которыми управляет программа: папку профиля, порт отладки, прокси, user-agent, язык,--headless. - Координаты из
/sessions/geoсохраняются в профиле, но браузеру пока не передаются, как и поле «Геолокация» в окне программы: сайты определяют местоположение по IP прокси, аnavigator.geolocationне подменяется. Не разрешайте сайтам доступ к геолокации. - Selenium: chromedriver, выполняя скрипты, оставляет на странице служебные переменные
cdc_…, по которым его узнают системы защиты от ботов. Это свойство самого chromedriver в любом браузере. У Puppeteer и Playwright такого следа нет.
