Computers on demand

Android phones

A virtual Android phone for apps that only exist on mobile. It is a computer with os: "android": the same screenshot, action, file, viewer and takeover API, plus actions that read the screen as elements and control apps.

At a glance

What it is
An Android 15 phone (AOSP, 720 x 1280, no Google Play) your agent taps and swipes, with app actions and an adb tunnel.
Use it for
Mobile apps with no API, and testing with adb, Appium or Maestro.
Use something else when
A website: Linux desktop. Windows software: Windows desktop.
Start it
POST /api/v1/computers with "os": "android", or New sandbox (?type=android), where the deployment has phone hosts.
Lifecycle
Sleeps after 5 idle minutes with its memory saved and wakes in about a second. Its disk is kept until you delete it.
Price
$0.15 an hour awake, per second. Asleep: $0.08 per GB-month of disk.
Limits
x86_64 by default; "arch": "arm64" where ARM hosts exist. Apps install as APKs. With no phone host, creating one returns 403 machine_unavailable.
Searches apartments
Saves a contact
Installs an APK
Looks things up
Plans a route
Sets up an app
Plays 2048
Android phones run where Maritime has hosts for them, and New sandbox in the dashboard offers an Android phone there. Where a deployment has none, creating one returns 403 machine_unavailable.

When to use it

  • Mobile-only apps with no web version and no API.
  • Testing an Android app with an agent, or with your own tools over adb.

Create one

From the dashboard, open New sandbox (/dashboard/new-sandbox?type=android), name the phone and click Start.

curl -X POST https://api.maritime.sh/api/v1/computers \
  -H "Authorization: Bearer $MARITIME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"externalUserId": "u_123", "os": "android"}'

Then open an app and tap. Over REST, Android actions go to the same actions route as every other action:

curl -X POST https://api.maritime.sh/api/v1/computers/COMPUTER_ID/actions \
  -H "Authorization: Bearer $MARITIME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"action": "open_app", "package": "com.android.settings"}'

Actions

  • The standard actions map to touch: left_click is a tap, right_click a long press, left_click_drag a swipe. Escape is Back, Home is the home screen, Recents is the app switcher.
  • Android only: ui_tree (the screen as elements with text and centers), list_apps, open_app, stop_app, install_app (an APK written under /data) and open_url.
  • exec runs in the Android shell (am, pm, input). Files under /data are the shared storage.
  • An adb tunnel at /api/v1/computers/{id}/adb (WebSocket) lets you attach adb, Appium or Maestro.

What is on the phone

  • An AOSP build of Android 15, with a 720 x 1280 screen. Screenshot pixels and tap coordinates match one to one.
  • No Google apps and no Google Play. Install apps as APKs.
  • The default phone is x86_64 and does not run apps that ship only ARM code. Where your account has ARM hosts, create with "arch": "arm64" for those apps; it is slower.

Lifetime and limits

  • It sleeps after 5 idle minutes with its memory saved, and wakes on the next action in about a second.
  • Its disk is kept until you delete it. Deleting it deletes the disk.
  • It is billed at $0.15 an hour while awake and $0.08 per GB-month of disk while asleep, and it counts toward your awake-at-once limit while it is awake, like any computer. It runs on the free trial (a card on file) or any plan, where phone hosts are available.

Rate limits and errors: Computers: limits.