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
mobyx