Lokal na API ng Aurorium v1

Hinahayaan ng lokal na API ang mga script na tumatakbo sa iyong computer na pamahalaan ang mga profile ng Aurorium, session ng browser, folder, proxy, at cookies. Nagsisimula ang server kasabay ng desktop application at maa-access lamang sa parehong computer.

#Mabilis na pagsisimula

  1. Simulan ang Aurorium at mag-sign in sa iyong account.
  2. Buksan ang Automation → API at bumuo ng API key.
  3. I-save agad ang key: isang beses lamang ito ipinapakita ng backend.
  4. Ipadala ang key sa bawat request gamit ang Authorization: Bearer <api_key>.
bash
curl "http://127.0.0.1:50325/api/v1/health" \
  -H "Authorization: Bearer $AURORIUM_API_KEY"

Base URL:

text
http://127.0.0.1:50325/api/v1

Nakikinig lamang ang server sa 127.0.0.1, hindi sa panlabas na network interface. Ang kasalukuyang nakapirming port ay 50325.

#Format ng tugon

Pareho ang balangkas ng tugon para sa mga matagumpay na resulta at mga error ng application:

json
{
  "code": 0,
  "msg": "success",
  "data": {},
  "request_id": "req_0d30b83f3fbb43e6a2e1b255e21d24b8"
}
  • Ang code = 0 ay nangangahulugang tagumpay.
  • Ang code != 0 ay nangangahulugang error ng application; hindi sapat na suriin lamang ang HTTP status.
  • Itago ang request_id sa mga log ng iyong integration para sa pag-diagnose.
  • Karaniwang nagbabalik ang server ng HTTP 200 kahit may error ang application.
  • Kung lumampas sa 5 MiB ang JSON body, ibabalik ng API ang code: 1001 at msg: "request body too large".

Halimbawa ng error:

json
{
  "code": 1201,
  "msg": "profile not found",
  "data": null,
  "request_id": "req_7f3ab37ea65048f99ebd0fdbe6f4da63"
}

#Mga karaniwang parameter

Tinatanggap ng mga endpoint ng listahan ang:

ParameterDefaultLimitasyon
page1minimum na 1
page_size50maximum na 200; nililimitahan sa 200 ang mas malalaking halaga

Format ng data sa tugon ng listahan:

json
{
  "list": [],
  "page": 1,
  "page_size": 50,
  "total": 0
}

#Pangkalahatang-ideya ng mga endpoint

MethodPathLayunin
GET/healthKahandaan ng application at koneksyon sa cloud
GET/versionMga bersyon ng application at API
GET/profileIlista ang mga profile na hindi naka-archive
POST/profileGumawa ng profile
GET/profile/:idKunin ang mga detalye ng profile
PATCH/profile/:idBahagyang i-update ang profile
DELETE/profile/:idI-delete ang profile
GET/folderIlista ang mga folder
POST/folderGumawa ng folder
PUT/folder/:idPalitan ang pangalan ng folder
DELETE/folder/:idI-delete ang folder
GET/browser/statusKunin ang status ng paglulunsad ng profile
GET/browser/activeIlista ang mga tumatakbong profile
POST/browser/startSimulan ang profile gamit ang CDP
POST/browser/stopIhinto ang profile
POST/browser/stop-allIhinto ang mga lokal na profile
POST/proxy/checkSuriin ang proxy
PUT/profile/:id/proxyPalitan ang proxy ng profile
GET/profile/:id/cookiesMag-export ng cookies
POST/profile/:id/cookies/importMag-import ng cookies
GET/deviceIlista ang mga device ng account
GET/catalogKunin ang mga pinapayagang halaga ng fingerprint

#System

#GET /health

Ibinabalik ang kahandaan ng lokal na application, estado ng koneksyon sa cloud, at ID ng kasalukuyang device.

json
{
  "ready": true,
  "cloud_connected": true,
  "device_id": "device-id-or-null"
}

Kailangan ang authentication kahit para sa pagsusuri ng kalagayan ng serbisyo.

#GET /version

json
{
  "app_version": "0.3.1",
  "core_version": null,
  "api_version": "v1"
}

Hindi pa ipinapatupad ang core_version at palaging null ang ibinabalik nito.

#Mga profile

#GET /profile

Mga parameter ng query:

ParameterMga halagaPaglalarawan
folder_idObjectIdI-filter ayon sa folder
namestringMaghanap ayon sa pangalan
statusall, running, idleAng default ay all
page, page_sizeintegerPaghahati sa mga pahina

Item sa listahan:

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"
}

Hindi ibinabalik ang mga naka-archive na profile. Inilalapat ang filter na running|idle sa client pagkatapos lamang ma-load ang pahina, kaya maaaring hindi tumugma ang total at ang bilang ng mga item sa pahina sa na-filter na listahan.

#POST /profile

Pinakapayak na request:

json
{
  "name": "Automation profile"
}

Mga suportadong field:

FieldUriKinakailanganMga tala
namestringooPangalang hindi walang laman
descriptionstringhindiAng default ay ""
folder_idstring o nullhindiMongo ObjectId; ang null ay nangangahulugang walang folder
tagsarrayhindiAng default ay []
osstringhindiwindows, macos, linux
os_versionstringhindiPahiwatig ng bersyon ng OS para sa pagbuo ng fingerprint, gaya ng "11" o "Tahoe"; tingnan ang /catalog para sa mga inirerekomendang halaga
is_armbooleanhindiPahiwatig ng ARM; hinuhugot mula sa manufacturer ng GPU kapag hindi tinukoy
proxyobjecthindiInline na proxy sa format sa ibaba
proxy_idstringhindiSanggunian sa umiiral na proxy; mas inuuna ang proxy
launch_argumentsstringhindiMga argument sa paglulunsad bilang iisang string
start_pagestringhindiPanimulang pahina
fingerprintobjecthindiBahagyang pagpapalit sa mga halaga ng fingerprint

Halimbawang may proxy:

json
{
  "name": "Profile with proxy",
  "os": "windows",
  "proxy": {
    "type": "socks5",
    "host": "127.0.0.1",
    "port": 1080,
    "user": "login",
    "password": "secret"
  }
}

Asynchronous ang paggawa ng profile sa backend. Hinihintay ng lokal na API ang completion event at karaniwang ibinabalik ang buong modelo ng profile. Kung mabigo ang kasunod na pagbasa, maaaring profile_id lamang ang maibalik.

#GET /profile/:id

Nagbabalik ng item sa listahan na may dagdag na mga object na proxy at fingerprint. Hindi kailanman ibinabalik bilang plain text ang password ng proxy; kapag mayroon, pinapalitan ito ng ******.

#PATCH /profile/:id

Bahagyang ina-update ang profile:

json
{
  "name": "New name",
  "description": "Updated through API",
  "folder_id": null,
  "fingerprint": {
    "timezone_mode": "manual",
    "timezone": "Europe/Moscow"
  }
}

Ang walang lamang body ay matagumpay na operasyong walang epekto. Agad na inilalapat ang metadata. Agad ding inilalapat ang mga pagbabago sa fingerprint kapag nakahinto ang profile; para sa tumatakbong profile, ipinagpapaliban ang mga ito hanggang sa susunod na paglulunsad at inililista sa deferred_fields.

json
{
  "profile_id": "507f1f77bcf86cd799439011",
  "deferred_fields": ["fingerprint.timezone_mode", "fingerprint.timezone"]
}

Para sa nakahintong profile, palaging walang laman ang deferred_fields.

#DELETE /profile/:id

Inihihinto ng query na force=true ang profile na tumatakbo sa kasalukuyang device bago ito i-delete. Kung walang force, ibinabalik ng ganitong profile ang 1203.

json
{
  "profile_id": "507f1f77bcf86cd799439011",
  "deleted": true
}

Idempotent ang pag-delete para sa ObjectId na may wastong syntax: kasalukuyang itinuturing ang tugong “hindi nahanap” ng backend bilang profile na na-delete na.

#Fingerprint

Sinusuportahan ng object na fingerprint sa POST at PATCH ang bahagyang pag-update sa mga field na ito:

FieldUri o mga halaga
timezone_modeauto, manual
timezonestring o null
language_modeauto, manual
languagesstring[]; ginagamit ang unang item
languagestring; pinaikling alternatibo
screen_resolutionstring
webrtc_modereal, replace
canvas_noiseboolean
webgl_image_noiseboolean
webgl_vendorstring o null
webgl_rendererstring o null
audio_noiseboolean
client_rects_noiseboolean
hardware_concurrencynumero
device_memorynumero
do_not_trackdefault, true
os_versionstring
dns_modereal, manual
dns_serverstring o null
geolocation{mode, latitude, longitude, accuracy}
media_devices{audio_inputs, audio_outputs, video_inputs}

Gamitin ang /catalog para kunin ang mga tugmang halaga ng OS, GPU, CPU, RAM, screen, time zone, at wika.

#Mga folder

#GET /folder

Sinusuportahan ang name, page, at page_size.

json
{
  "folder_id": "507f1f77bcf86cd799439012",
  "name": "QA",
  "profile_count": 3,
  "system": false
}

#POST /folder

json
{ "name": "QA" }

#PUT /folder/:id

json
{ "name": "QA automation" }

#DELETE /folder/:id

Hindi kasamang nade-delete ang mga profile kapag nag-delete ng folder. Inililipat ng backend ang mga profile ng koponan sa system folder at inaalis sa anumang folder ang mga personal na profile.

json
{
  "folder_id": "507f1f77bcf86cd799439012",
  "deleted": true,
  "moved_profiles": 3,
  "moved_to": null
}

Kinakalkula ang moved_profiles at moved_to bago mag-delete gamit ang impormasyong available at maaaring hindi tumpak kapag hindi mabasa ang estado ng cloud.

#Siklo ng buhay ng browser

#GET /browser/status?profile_id=:id

Ibinabalik ang idle o running, ang device ng paglulunsad, at ang mga coordinate ng proseso na lokal na available.

#GET /browser/active

Tinatanggap ng query na scope ang:

  • this_device: mga profile na lokal na tumatakbo; ito ang default;
  • account: mga profile na tumatakbo sa lahat ng device ng account ayon sa registry ng cloud.

Sinusuportahan ang karaniwang paghahati sa mga pahina.

#POST /browser/start

json
{
  "profile_id": "507f1f77bcf86cd799439011",
  "headless": false,
  "open_urls": ["https://example.com"],
  "launch_args": ["--window-size=1280,800"],
  "load_extensions": true
}

Matagumpay na tugon:

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
  }
}

Idempotent ang muling pagsisimula ng profile sa kasalukuyang device. Ang profile na tumatakbo sa ibang device ay nagbabalik ng 1204. Kung wala ang kinakailangang browser core o dina-download pa ito, ibinabalik ng lokal na API ang 1304; hindi ito awtomatikong dina-download ng method na ito.

#POST /browser/stop

json
{ "profile_id": "507f1f77bcf86cd799439011" }

Idempotent ang paghinto at ibinabalik nito ang was_running.

#POST /browser/stop-all

Inihihinto ang lahat ng profile sa kasalukuyang device:

json
{
  "stopped": ["507f1f77bcf86cd799439011"],
  "count": 1
}

#Proxy

Format ng inline na proxy:

FieldUriMga tala
typestringhttp, socks4, socks5, ssh, no_proxy
hoststringKinakailangan maliban sa no_proxy
portinteger/string1..65535, maliban sa no_proxy
userstringOpsyonal
passwordstringOpsyonal
refresh_urlstringOpsyonal

#POST /proxy/check

Magbigay ng eksaktong isang pinagmulan: proxy o 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

Ang body ay ang mismong proxy object, nang walang pambalot na proxy:

json
{
  "type": "no_proxy"
}

Para sa tumatakbong profile, ipinagpapaliban ang pagbabago hanggang sa susunod na paglulunsad at kasama sa tugon ang deferred_fields: ["proxy"].

#Cookies

Gumagamit ang cookie ng flat na format:

json
{
  "domain": ".example.com",
  "name": "session",
  "value": "value",
  "path": "/",
  "expires": 1790000000,
  "http_only": true,
  "secure": true,
  "same_site": "lax"
}

Ang expires ay Unix time sa segundo; ang 0 o null ay nangangahulugang session cookie. Tinatanggap ng same_site ang unspecified, no_restriction, lax, o strict.

#GET /profile/:id/cookies

Unang binabasa ang lokal na Chromium SQLite database at ginagamit ang cookies sa cloud kung hindi ito available.

#POST /profile/:id/cookies/import

json
{
  "clear": true,
  "cookies": [
    {
      "domain": ".example.com",
      "name": "session",
      "value": "value"
    }
  ]
}
  • Pinapalitan ng clear=true ang cookies at ito ang default;
  • Pinagsasama ng clear=false ang mga ito sa umiiral na kopya sa cloud;
  • dapat nakahinto ang profile sa bawat device;
  • dapat kasama sa bawat tinatanggap na cookie ang hindi bababa sa domain at name.

#Mga device

#GET /device

Nagbabalik ng listahang hinati sa mga pahina:

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"]
}

#Katalogo

#GET /catalog

Ibinabalik ang mga pinapayagang halaga ng fingerprint at ang mga dependency na GPU → CPU/RAM/screen. Gamitin ang os=windows|macos|linux para limitahan ang resulta sa isang operating system.

Nakadepende sa cloud ang katalogo at nagbabalik ng 1701 kapag hindi available ang cloud.

#Mga code ng error

CodeKahulugan
0Tagumpay
1001Hindi wastong JSON o sobrang laki ng request body
1002Hindi kilalang endpoint o HTTP method
1003Nawawala o hindi wastong API key
1101Nawawala ang kinakailangang parameter
1103Hindi wastong halaga o format ng parameter
1201Hindi nahanap ang profile
1202Naka-archive ang profile
1203Tumatakbo ang profile sa device na ito
1204Tumatakbo ang profile sa ibang device
1301Hindi nasimulan ang browser core
1304Wala ang browser core o dina-download pa ito
1401Hindi wastong configuration ng proxy
1402Nabigo ang pagsusuri ng proxy
1501Hindi nahanap ang folder
1503Hindi maaaring i-delete ang system folder
1601Hindi wastong format ng cookie
1602Hindi maaaring mag-import ng cookies sa tumatakbong profile
1701Hindi available ang cloud
1901Panloob na error

#Pinakapayak na halimbawa sa JavaScript

js
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);

#Compatibility

  • Kasama ang bersyon ng API sa URL: /api/v1.
  • Hindi nagbabago ang mga numerikong code ng error sa loob ng isang pangunahing bersyon ng API.
  • Dapat balewalain ng mga client ang mga hindi kilalang field dahil maaaring magdagdag ng opsyonal na field sa tugon nang hindi sinisira ang compatibility.
  • Ang mga pagbabagong sumisira sa compatibility ay nangangailangan ng bagong URL ng pangunahing bersyon, gaya ng /api/v2, o ng panahon ng paglipat na tahasang pinagkasunduan.