Live · api.mobile.pairful.ai

Give your agent
a real phone.

A real, isolated Android phone per user, driven over one JSON API. Read the screen as a tree of numbered nodes, act on them by ref, and know when the screen has settled — from your code, or from Claude, Cursor and any MCP client.

Per-user
isolated VM & /data
Surfaces
Android apps · the phone's browser
Drive it
HTTP · MCP

Features

The phone does the work.
You send requests.

01 · Isolation

One device per user

Each session is its own Android instance with a persistent /data, sealed per user at rest.

02 · Observe

The screen as a tree

Every interactive node gets a ref. Act on the ref, raw coordinates, or just the label text.

03 · Settle

Know when it stopped moving

Each action reports whether the screen changed, so you don't sleep and hope.

04 · Input

Sensitive by default

Mark typed text sensitive and it's never logged, audited or echoed back.

05 · Apps

Installed on demand

Launch a package the phone doesn't have — it's fetched from the app cache once, then kept.

06 · Web

The browser, same verbs

A web session drives the phone's own browser over CDP with the same tap/type/swipe.

07 · Pools

Warm, not cold

Golden pools fork an already-booted phone instead of booting one per request.

08 · Sensors

Location & notifications

Feed the phone a GPS fix; read what landed in its notification shade.

API

Four calls to a first tap.

Every route but /health takes Authorization: Bearer $TOKEN.

Acquire a phone for a user. Their /data comes with it.

$ curl -X POST $API/sessions \
    -H "Authorization: Bearer $TOKEN" \
    -d '{"user":"demo","locale":"en-US"}'

→ 200
{
  "id": "s-ab12cd",
  "kind": "android",
  "serial": "emulator-5554",
  "app": null,
  "tenant": null,
  "user": "demo",
  "mode": "a11y"
}

What's on screen, interactive nodes first. Refs stay valid until the next read.

$ curl $API/sessions/s-ab12cd/tree -H "Authorization: Bearer $TOKEN"

→ 200
[
  { "ref": 12, "role": "EditText", "hint": "Email", "editable": true, ... },
  { "ref": 13, "role": "EditText", "hint": "Password", "password": true, ... },
  { "ref": 14, "role": "Button", "text": "Log in", "clickable": true, ... },
  { "ref": 15, "role": "TextView", "text": "Forgot password?", ... }
]

Tap by ref, by x/y, or by label text.

$ curl -X POST $API/sessions/s-ab12cd/tap \
    -H "Authorization: Bearer $TOKEN" \
    -d '{"text":"Log in"}'

→ 200
{ "tapped": 14, "changed": true }

The current screen as a PNG.

$ curl $API/sessions/s-ab12cd/screenshot \
    -H "Authorization: Bearer $TOKEN" -o screen.png

→ 200  content-type: image/png

Pricing

Start free.
Pay for phone-time when you grow.

Developer

soon

For a project in production.

  • 5 phones at once
  • 1,500 phone-minutes / month
  • Higher rate limits
  • Overage by the phone-minute
Get notified

Startup

soon

For a growing fleet.

  • 25 phones at once
  • 6,000 phone-minutes / month
  • Priority capacity
  • Overage by the phone-minute
Get notified

Enterprise

Custom

Dedicated capacity & terms.

  • Unlimited concurrent phones
  • Dedicated pools & egress
  • SLA & support
  • Invoicing
Contact us

Billing isn't switched on yet — usage is metered, nothing is charged. The free tier is the only active plan today.

Principles

An honest phone.
It says what it is, and acts only for its owner.

What you get

  • One phone per person — its own Android and its own /data
  • State sealed under that person's key; no app can tell whose phone it is
  • The person's own time zone and language; debugging off

What we don't do

  • Bundle Google apps without a license — microG instead
  • Spoof another maker's device — it identifies honestly as a Phonebase phone
  • Rotate proxies or identities to dodge bans, limits or captchas
  • Create accounts or act beyond what the owner asked

The cost: apps that require hardware-backed integrity (most banks) won't run. Read the principles →

Status

Live, and honest about it.

Here today

  • Public API at api.mobile.pairful.ai — self-serve sign-up and your own API key
  • The device API — sessions, tree, tap/type/swipe/key, launch, install, location, notifications
  • Per-user state, sealed at rest, durable across VM replacement
  • Per-key isolation, rate limits, a monthly phone-minute quota and usage metering
  • An MCP server, so Claude, Cursor or any MCP client can drive the phone

On the way

  • Email verification on sign-up (today: a per-IP limit and the free quota)
  • Paid plans and billing — metering runs now; charges don't yet
  • More than one region, and higher availability