A runtime budget is part of the workflow, not a billing surprise to inspect after the agent disconnects. Mobilebox bills running phone time at $0.01 per phone-minute, with a 60-second minimum. Parked phones are free.
These are the current implementation defaults, not a promised future price. The authenticated account endpoint returns the configured rate and balance; use it as the runtime source of truth.
Bound the session at creation
{
"name": "checkout-smoke-test",
"idle_timeout": 300,
"max_duration": 900
}idle_timeout stops an inactive phone; max_duration bounds the overall session. Both use seconds. The defaults are five idle minutes and fifteen running minutes. The allowed session cap reaches three hours. Choose a shorter cap for a small test rather than relying on an agent to remember cleanup.
A duration cap also determines the session reservation. The default fifteen-minute session reserves $0.15 at the default rate. Check available balance before starting a large set of phones.
Count time, then verify the record
At the default rate, one phone running fifteen minutes costs $0.15. Three phones running fifteen minutes cost $0.45. Those examples exclude any separate model, app, proxy, or external service costs; Mobilebox’s phone bill does not describe your entire agent stack.
Use GET /v1/account to inspect balance and price. Use GET /v1/phones/{id}/sessions to inspect session start, readiness, end reason, billed seconds, and cost. Session records are better evidence than a stopwatch around one request.
Cleanup still matters
Park in a finally block when retaining state. Delete when the phone is disposable. A client crash or a network failure may prevent cleanup, which is why server-enforced timeouts matter.
Do not retry create blindly after an ambiguous connection failure. List the project’s phones first and look for the intended sandbox. A duplicated create can start a second billable session.
Capacity is another budget
The default project limit is three running and ten total phones. A 429 phone_limit response means your project needs to park or delete something. A 503 box_full response means the shared host is full; respect retry_after and Retry-After. Those are different constraints with different fixes. See errors and recovery.