Локальний API Aurorium v1 Локальний API дає змогу скриптам, що працюють на вашому комп’ютері, керувати профілями Aurorium, сеансами браузера, папками, проксі та cookie. Сервер запускається разом із настільним застосунком і доступний лише на тому самому комп’ютері.
Ця документація описує локальний API v1. Версію API включено до базової URL-адреси: /api/v1. Локальний API наразі не підтримує командні профілі. Їхню підтримку заплановано в майбутніх випусках. # Швидкий стартЗапустіть Aurorium і увійдіть до свого облікового запису. Відкрийте Автоматизація → API та згенеруйте ключ API. Одразу збережіть ключ: серверна частина показує його лише один раз. Надсилайте ключ із кожним запитом через Authorization: Bearer <api_key>. bash curl "http://127.0.0.1:50325/api/v1/health" \
-H "Authorization: Bearer $AURORIUM_API_KEY"Базова URL-адреса:
text http://127.0.0.1:50325/api/v1Сервер слухає лише 127.0.0.1, а не зовнішній мережевий інтерфейс. Поточний фіксований порт — 50325.
# Формат відповідіУспішні результати й помилки застосунку використовують однакову оболонку відповіді:
json {
"code": 0,
"msg": "success",
"data": {},
"request_id": "req_0d30b83f3fbb43e6a2e1b255e21d24b8"
}code = 0 означає успіх.code != 0 означає помилку застосунку; перевірки лише статусу HTTP недостатньо.Зберігайте request_id у журналах інтеграції для діагностики. Сервер зазвичай повертає HTTP 200 навіть у разі помилки застосунку. Якщо тіло JSON перевищує 5 MiB, API повертає code: 1001 і msg: "request body too large". Приклад помилки:
json {
"code": 1201,
"msg": "profile not found",
"data": null,
"request_id": "req_7f3ab37ea65048f99ebd0fdbe6f4da63"
}# Спільні параметриКінцеві точки списків приймають:
Параметр За замовчуванням Обмеження page1мінімум 1 page_size50максимум 200; більші значення обмежуються до 200
Формат data у відповіді зі списком:
json {
"list": [],
"page": 1,
"page_size": 50,
"total": 0
}# Огляд кінцевих точокМетод Шлях Призначення GET /healthГотовність застосунку та з’єднання з хмарою GET /versionВерсії застосунку й API GET /profileСписок неархівованих профілів POST /profileСтворити профіль GET /profile/:idОтримати подробиці профілю PATCH /profile/:idЧастково оновити профіль DELETE /profile/:idВидалити профіль GET /folderСписок папок POST /folderСтворити папку PUT /folder/:idПерейменувати папку DELETE /folder/:idВидалити папку GET /browser/statusОтримати статус запуску профілю GET /browser/activeСписок запущених профілів POST /browser/startЗапустити профіль із CDP POST /browser/stopЗупинити профіль POST /browser/stop-allЗупинити локальні профілі POST /proxy/checkПеревірити проксі PUT /profile/:id/proxyЗамінити проксі профілю GET /profile/:id/cookiesЕкспортувати cookie POST /profile/:id/cookies/importІмпортувати cookie GET /deviceСписок пристроїв облікового запису GET /catalogОтримати допустимі значення відбитка
# Система# GET /healthПовертає готовність локального застосунку, стан з’єднання з хмарою та ID поточного пристрою.
json {
"ready": true,
"cloud_connected": true,
"device_id": "device-id-or-null"
}Автентифікація потрібна навіть для перевірки працездатності.
# GET /versionjson {
"app_version": "0.3.1",
"core_version": null,
"api_version": "v1"
}core_version ще не реалізовано, тому воно завжди повертає null.
# Профілі# GET /profileПараметри запиту:
Параметр Значення Опис folder_idObjectId Фільтрування за папкою namestring Пошук за назвою statusall, running, idleЗа замовчуванням all page, page_sizeinteger Поділ на сторінки
Елемент списку:
json {
"profile_id": "507f1f77bcf86cd799439011",
"name": "Automation profile",
"folder_id": null,
"status": "idle",
"location": null,
"os": "windows",
"os_version": "Windows 11",
"core": "chrome",
"core_version": "134",
"description": "",
"created_at": "2026-07-24T10:00:00Z",
"updated_at": "2026-07-24T10:00:00Z"
}Архівовані профілі не повертаються. Фільтр running|idle застосовується на клієнті лише після завантаження сторінки, тому total і кількість елементів на сторінці можуть не відповідати відфільтрованому списку.
# POST /profileМінімальний запит:
json {
"name": "Automation profile"
}Підтримувані поля:
Поле Тип Обов’язкове Примітки namestring так Непорожня назва descriptionstring ні За замовчуванням "" folder_idstring або null ні Mongo ObjectId; null означає відсутність папки tagsarray ні За замовчуванням [] osstring ні windows, macos, linuxos_versionstring ні Підказка версії ОС для генерації відбитка, наприклад "11" або "Tahoe"; рекомендовані значення див. у /catalog is_armboolean ні Підказка ARM; якщо пропущено, визначається за виробником GPU proxyobject ні Вбудований об’єкт проксі у форматі нижче proxy_idstring ні Посилання на наявний проксі; proxy має пріоритет launch_argumentsstring ні Аргументи запуску одним рядком start_pagestring ні Початкова сторінка fingerprintobject ні Часткове перевизначення відбитка
Приклад із проксі:
json {
"name": "Profile with proxy",
"os": "windows",
"proxy": {
"type": "socks5",
"host": "127.0.0.1",
"port": 1080,
"user": "login",
"password": "secret"
}
}Створення профілю на серверній частині асинхронне. Локальний API чекає на подію завершення й зазвичай повертає повну модель профілю. Якщо подальше читання не вдається, може повернутися лише profile_id.
# GET /profile/:idПовертає елемент списку з додатковими об’єктами proxy і fingerprint. Пароль проксі ніколи не повертається відкритим текстом; за наявності його замінено на ******.
# PATCH /profile/:idЧастково оновлює профіль:
json {
"name": "New name",
"description": "Updated through API",
"folder_id": null,
"fingerprint": {
"timezone_mode": "manual",
"timezone": "Europe/Moscow"
}
}Порожнє тіло успішно обробляється без змін. Метадані застосовуються одразу. Зміни відбитка застосовуються одразу, якщо профіль зупинено; для запущеного профілю вони відкладаються до наступного запуску й перелічуються в deferred_fields.
json {
"profile_id": "507f1f77bcf86cd799439011",
"deferred_fields": ["fingerprint.timezone_mode", "fingerprint.timezone"]
}Для зупиненого профілю deferred_fields завжди порожній.
# DELETE /profile/:idПараметр запиту force=true зупиняє профіль, що працює на поточному пристрої, перед видаленням. Без force такий профіль повертає 1203.
json {
"profile_id": "507f1f77bcf86cd799439011",
"deleted": true
}Видалення ідемпотентне для синтаксично коректного ObjectId: відповідь серверної частини «не знайдено» наразі трактується як уже видалений профіль.
# ВідбитокОб’єкт fingerprint у POST і PATCH підтримує часткове оновлення таких полів:
Поле Тип або значення timezone_modeauto, manualtimezonestring або null language_modeauto, manuallanguagesstring[]; використовується перший елемент languagestring; скорочений альтернативний запис screen_resolutionstring webrtc_modereal, replacecanvas_noiseboolean webgl_image_noiseboolean webgl_vendorstring або null webgl_rendererstring або null audio_noiseboolean client_rects_noiseboolean hardware_concurrencynumber device_memorynumber do_not_trackdefault, trueos_versionstring dns_modereal, manualdns_serverstring або null geolocation{mode, latitude, longitude, accuracy}media_devices{audio_inputs, audio_outputs, video_inputs}
Використовуйте /catalog, щоб отримати сумісні значення ОС, GPU, CPU, RAM, екрана, часового поясу й мови.
# Папки# GET /folderПідтримує name, page і page_size.
json {
"folder_id": "507f1f77bcf86cd799439012",
"name": "QA",
"profile_count": 3,
"system": false
}# POST /folder# PUT /folder/:idjson { "name": "QA automation" }# DELETE /folder/:idПрофілі не видаляються разом із папкою. Серверна частина переміщує командні профілі до системної папки, а особисті переводить у стан без папки.
json {
"folder_id": "507f1f77bcf86cd799439012",
"deleted": true,
"moved_profiles": 3,
"moved_to": null
}moved_profiles і moved_to обчислюються перед видаленням за можливості й можуть бути неточними, якщо стан хмари неможливо прочитати.
# Життєвий цикл браузера# GET /browser/status?profile_id=:idПовертає idle або running, пристрій запуску й локально доступні координати процесу.
# GET /browser/activeПараметр запиту scope приймає:
this_device — профілі, що працюють локально; значення за замовчуванням;account — профілі, що працюють на всіх пристроях облікового запису згідно з хмарним реєстром.Підтримується стандартний поділ на сторінки.
# POST /browser/startjson {
"profile_id": "507f1f77bcf86cd799439011",
"headless": false,
"open_urls": ["https://example.com"],
"launch_args": ["--window-size=1280,800"],
"load_extensions": true
}Успішна відповідь:
json {
"profile_id": "507f1f77bcf86cd799439011",
"already_running": false,
"debug_port": 51432,
"ws": "ws://127.0.0.1:51432/devtools/browser/...",
"webdriver": null,
"pid": 12345,
"lease": {
"device_id": "device-id",
"device_name": "Workstation",
"is_current_device": true
}
}Повторний запуск профілю на поточному пристрої ідемпотентний. Профіль, запущений на іншому пристрої, повертає 1204. Якщо потрібного ядра браузера немає або воно завантажується, локальний API повертає 1304; цей метод не завантажує його автоматично.
# POST /browser/stopjson { "profile_id": "507f1f77bcf86cd799439011" }Зупинення ідемпотентне й повертає was_running.
# POST /browser/stop-allЗупиняє кожен профіль на поточному пристрої:
json {
"stopped": ["507f1f77bcf86cd799439011"],
"count": 1
}# ПроксіФормат вбудованого об’єкта проксі:
Поле Тип Примітки typestring http, socks4, socks5, ssh, no_proxyhoststring Обов’язкове, крім no_proxy portinteger/string 1..65535, крім no_proxyuserstring Необов’язкове passwordstring Необов’язкове refresh_urlstring Необов’язкове
# POST /proxy/checkУкажіть рівно одне джерело: proxy або profile_id.
json {
"proxy": {
"type": "http",
"host": "proxy.example.com",
"port": 8080
}
}json {
"ok": true,
"exit_ip": "203.0.113.10",
"country": "DE",
"city": "Frankfurt",
"latitude": 50.11,
"longitude": 8.68,
"timezone": null,
"latency_ms": null
}# PUT /profile/:id/proxyТіло — безпосередньо об’єкт проксі, без оболонки proxy:
json {
"type": "no_proxy"
}Для запущеного профілю зміна відкладається до наступного запуску, а відповідь містить deferred_fields: ["proxy"].
# Файли cookieCookie використовує плоский формат:
json {
"domain": ".example.com",
"name": "session",
"value": "value",
"path": "/",
"expires": 1790000000,
"http_only": true,
"secure": true,
"same_site": "lax"
}expires — час Unix у секундах; 0 або null означає сеансовий cookie. same_site приймає unspecified, no_restriction, lax або strict.
# GET /profile/:id/cookiesСпочатку читає локальну базу даних Chromium SQLite, а якщо вона недоступна, використовує cookie, збережені в хмарі.
# POST /profile/:id/cookies/importjson {
"clear": true,
"cookies": [
{
"domain": ".example.com",
"name": "session",
"value": "value"
}
]
}clear=true замінює cookie та є значенням за замовчуванням;clear=false об’єднує їх із наявною хмарною копією;профіль має бути зупинений на кожному пристрої; кожен прийнятий cookie має містити щонайменше domain і name. # Пристрої# GET /deviceПовертає список із поділом на сторінки:
json {
"device_id": "device-id",
"device_name": "Workstation",
"platform": "windows",
"is_current_device": true,
"online": true,
"last_seen": "2026-07-24T10:00:00Z",
"running_profiles": 1,
"running_profile_ids": ["507f1f77bcf86cd799439011"]
}# Каталог# GET /catalogПовертає допустимі значення відбитка та залежності GPU → CPU/RAM/екран. Використовуйте os=windows|macos|linux, щоб обмежити результат однією операційною системою.
Каталог залежить від хмари й повертає 1701, коли хмара недоступна.
# Коди помилокКод Значення 0 Успіх 1001 Некоректний JSON або завелике тіло запиту 1002 Невідома кінцева точка або метод HTTP 1003 Ключ API відсутній або недійсний 1101 Відсутній обов’язковий параметр 1103 Некоректне значення або формат параметра 1201 Профіль не знайдено 1202 Профіль архівовано 1203 Профіль працює на цьому пристрої 1204 Профіль працює на іншому пристрої 1301 Не вдалося запустити ядро браузера 1304 Ядро браузера відсутнє або завантажується 1401 Некоректна конфігурація проксі 1402 Не вдалося перевірити проксі 1501 Папку не знайдено 1503 Системну папку не можна видалити 1601 Некоректний формат cookie 1602 Не можна імпортувати cookie в запущений профіль 1701 Хмара недоступна 1901 Внутрішня помилка
# Мінімальний приклад JavaScriptjs const baseUrl = "http://127.0.0.1:50325/api/v1";
const token = process.env.AURORIUM_API_KEY;
async function aurorium(path, options = {}) {
const response = await fetch(`${baseUrl}${path}`, {
...options,
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
...options.headers,
},
});
const result = await response.json();
if (result.code !== 0) {
throw new Error(`[${result.code}] ${result.msg}; ${result.request_id}`);
}
return result.data;
}
const profiles = await aurorium("/profile?page_size=10");
console.log(profiles.list);# СумісністьВерсію API включено до URL-адреси: /api/v1. Числові коди помилок стабільні в межах однієї основної версії API. Клієнти мають ігнорувати невідомі поля, оскільки необов’язкові поля відповіді можуть додаватися без порушення сумісності. Зміни, що порушують сумісність, потребують нової URL-адреси основної версії, наприклад /api/v2, або явно погодженого періоду міграції.