Documentation / API

API reference

#How to read this

Every address starts with http://127.0.0.1:50326/api/v1 (the port is the one in Settings → API). {id} is the id of a browser profile or Mobyx Device, or its name; {serial} is a phone's serial from /phones. A request with a body sends JSON; the fields are listed under the route. Routes marked all plans answer on every plan; the rest are part of the paid plans.

#System

1 route

GET /status
Is mobyx up, which version, which plan, and how many of each device there are.
Returns: {version, paid, phones, browsers, mobyx_devices, runs_running}
All plans.

#Browsers

13 routes

GET /browsers
Every browser profile, with its state and proxy (never the proxy's password).
Returns: [browser]
POST /browsers
Make a browser profile with its own fingerprint, and start it if asked.
Body: name (optional, a free one is chosen), engine (chrome | firefox | camoufox (default chrome)), system (windows11 | windows10 | macos | linux | android | ios | none (default windows11)), proxy (optional: host:port, user:pass@host:port, host:port:user:pass, socks5://...), language (optional, e.g. en-US), follow_ip (time zone and location follow the proxy (default true)), group (optional), notes (optional), start (start it now (default false))
Returns: browser
GET /browsers/{id}
One browser profile (by id or name).
Returns: browser
PATCH /browsers/{id}
Rename a profile, change its proxy, group, notes or home page.
Body: name, proxy (a proxy, or "" for none (a running profile restarts on it)), group, notes, homepage
Returns: browser
DELETE /browsers/{id}
Close and delete a profile, with its cookies and storage.
Returns: {deleted: id}
POST /browsers/{id}/start
Start a profile. With debug=true a Chrome profile also opens a debugging port: connect Playwright (connect_over_cdp), Puppeteer (browserURL) or Selenium (debuggerAddress) to debug_url.
Body: headless (no window (default false)), debug (open a debugging port (Chrome only))
Returns: browser + {debug_url, ws_endpoint}
POST /browsers/{id}/stop
Close a profile (its cookies and storage are kept).
Returns: browser
POST /browsers/{id}/open
Open an address (starting the profile if it is closed).
Body: url (the address), new_tab (in a new tab (default false))
Returns: {url, title}
GET /browsers/{id}/page
The open page: address, title and number of tabs.
Returns: {url, title, tabs}
POST /browsers/{id}/js
Run JavaScript on the open page and get its result back.
Body: script (a function body; 'return' gives the result), args (optional, passed in as args)
Returns: {result}
GET /browsers/{id}/cookies
The profile's cookies (it must be running).
Body: domain (optional filter (query string))
Returns: [cookie]
POST /browsers/{id}/cookies
Add cookies to the profile (JSON cookies, as exported).
Body: cookies ([{name, value, domain, path, ...}])
Returns: {added}
GET /browsers/{id}/screenshot
A PNG of the open page.
Returns: image/png

#Mobyx Devices

9 routes

GET /mobyx-devices
Every Mobyx Device (virtual Android phone) and its state.
Returns: [device]
GET /mobyx-devices/presets
The presets a new Mobyx Device can be made from.
Returns: [preset]
POST /mobyx-devices
Make a Mobyx Device.
Body: name (optional), preset (optional, see /mobyx-devices/presets)
Returns: device
GET /mobyx-devices/{id}
One Mobyx Device (by id or name).
Returns: device
POST /mobyx-devices/{id}/start
Start a Mobyx Device. With wait=true the answer comes once Android has finished booting (a minute or so); its 'serial' then works with every /phones/{serial} action.
Body: wait (wait for Android (default true)), window (show its own window (default false))
Returns: device
POST /mobyx-devices/{id}/stop
Shut a Mobyx Device down (its state is kept).
Returns: device
DELETE /mobyx-devices/{id}
Delete a Mobyx Device and its storage.
Returns: {deleted: id}
POST /mobyx-devices/{id}/sms
Deliver a text message to the device's virtual SIM.
Body: from (sender number), message (the text)
Returns: {sent}
POST /mobyx-devices/{id}/battery
Set the battery level the device reports.
Body: percent (0-100), charging (optional true/false)
Returns: {ok}

#Phones

13 routes

GET /phones
Every connected phone and running Mobyx Device (the app's last scan, instant).
Returns: [phone]
GET /phones/{serial}
Model, Android version, battery and more for one phone.
Returns: phone
POST /phones/{serial}/tap
Tap a point on the screen.
Body: x, y
Returns: {ok}
POST /phones/{serial}/swipe
Swipe from one point to another.
Body: x1, y1, x2, y2, duration_ms (default 300)
Returns: {ok}
POST /phones/{serial}/text
Type text into the focused field (any language).
Body: text
Returns: {ok}
POST /phones/{serial}/key
Press a key: home, back, call, end_call, volume_up, volume_down, power, camera, tab, enter, delete, menu, search, play_pause, mute, recent, brightness_down, brightness_up, or an Android keycode.
Body: key (a name or a number)
Returns: {ok}
POST /phones/{serial}/click
Find something on the screen and tap it, the way a Smart Click step does: by its text, resource id, content description or XPath.
Body: text, resource_id, content_desc, xpath
Returns: {found}
POST /phones/{serial}/open-url
Open an address in the phone's browser.
Body: url
Returns: {ok}
GET /phones/{serial}/apps
The apps installed on the phone (package names).
Returns: [package]
POST /phones/{serial}/apps/{package}/open
Open an app.
Returns: {ok}
POST /phones/{serial}/apps/{package}/stop
Force-stop an app.
Returns: {ok}
POST /phones/{serial}/shell
Run an adb shell command and get what it printed.
Body: command, timeout (seconds, default 30)
Returns: {output}
GET /phones/{serial}/screenshot
A PNG of the phone's screen.
Returns: image/png

#Workflows

6 routes

POST /workflows/run
Run a saved workflow on phones, Mobyx Devices and browsers at once. Browsers and Mobyx Devices that are closed are started first. Answers at once with the run; follow it at /runs/{id}.
Body: file (path of a workflow saved from Workflow Studio), workflow (or the saved workflow's JSON itself), plan (or a compact plan: {name, nodes: [{id, node, set: {...}}], links: [[from, to]]} -- the format of the recipes and the AI Assistant (GET /workflows/nodes lists every node)), targets ([phone serial | 'browser:' | 'mobyx:']), mode (parallel | sequential), wait (answer when the run is over (default false)), timeout (seconds to wait, default 600)
Returns: run
GET /workflows/nodes
Every node a plan can use, with its settings -- what the AI Assistant builds from.
Returns: catalog
GET /workflows/recipes
The ready-made plans that come with mobyx, to run or to copy from.
Returns: [plan]
GET /runs
Runs started over the API, newest first (without their logs).
Returns: [run]
GET /runs/{id}
A run's state and its log. ?wait=30 waits up to 30 s for it to finish.
Returns: run
POST /runs/{id}/stop
Stop a run.
Returns: run