CLOUSD
Open account

Clousd API reference.

Every route of the Clousd API v1, 78 operations, grouped the way you will use them. Parameters, request bodies and responses are in the OpenAPI file.

Every request
# base URL
https://api.clousd.com/v1

# header
Authorization: Bearer cl_live_your_key

# errors are JSON
{ "error": "busy", "message": "…" }

Basics

WhatValueNotes
Base URLhttps://api.clousd.com/v1HTTPS only, JSON in and out
AuthenticationAuthorization: Bearer cl_live_…Keys are made in the dashboard, scoped to read or control and to a list of devices
Long operations202 Accepted → GET /v1/jobs/{id}Create, start, restore and similar calls return a job to poll
Errors{ "error": "busy", "message": "…" }A short code to branch on and a message for people
Full specificationopenapi-v1.yamlOpenAPI 3.1 with parameters, bodies and responses

Tasks

MethodRouteWhat it does
GET/v1/schedulesSchedules of this key
POST/v1/schedulesA task that runs by itself - daily, hourly or when you call it
POST/v1/schedules/{id}/togglePause or resume a schedule
POST/v1/schedules/{id}/deleteDelete a schedule
POST/v1/runsGive one phone or several a task in plain words
GET/v1/runsRuns of this key, newest first
GET/v1/runs/{id}One run - status, answer, structured_output, the card it waits on
DELETE/v1/runs/{id}Delete a finished run with its steps and screenshots
GET/v1/runs/{id}/eventsLive events as Server-Sent Events
GET/v1/runs/{id}/trajectoryEvery step - tool, target, result, whether the screen was kept
GET/v1/runs/{id}/steps/{n}.jpgThe screen before step n
POST/v1/runs/{id}/answerAnswer the run's card - a question (answer) or a permission (allow / decline)
POST/v1/runs/{id}/messageTell the running agent something; it reads it before its next step
POST/v1/runs/{id}/cancelStop the run
POST/v1/schedules/{id}/runStart a schedule now - the trigger for trigger=api
GET/v1/credentialsSaved logins - package, name and which fields are set; values are never returned
POST/v1/credentialsSave a login for an app
POST/v1/credentials/{id}/fieldsSet one field of a login
DELETE/v1/credentials/{id}/fields/{type}Remove one field of a login
DELETE/v1/credentials/{id}Delete a login

Devices

MethodRouteWhat it does
GET/v1/devicesDevices this key can see
POST/v1/devicesCreate a device (charged to the account of the API key)
GET/v1/devices/{name}One device
DELETE/v1/devices/{name}Delete the device: it moves to Trash for 14 days (not running, not billed) and can be restored; forever=1 deletes it with its data at once. On an account that has never paid, the device is always deleted at once.
POST/v1/devices/{name}/startStart the device
POST/v1/devices/{name}/stopStop the device (state is kept; a stopped device costs nothing)
POST/v1/devices/{name}/restartRestart the device
GET/v1/devices/{name}/iceICE servers for a WebRTC viewer of this device: the TURN of the device's host with a temporary credential (read key is enough)
GET/v1/devices/{name}/qualityQuality by category (last measurement)
GET/v1/androidAndroid versions you can create devices on
GET/v1/trashDevices in Trash, with when each one is deleted for good
POST/v1/trash/{name}/restoreBring a device back from Trash as a stopped device (start it when you need it)
POST/v1/devices/{name}/resetReset the device to a fresh state: apps and data are wiped, the phone comes back like new (same Android version, 1-5 min)
GET/v1/devices/{name}/screenrecordRecord the screen for a few seconds
POST/v1/devices/{name}/labelGive a phone a name people and agents can tell apart ("QA team"); empty = back to "Phone #N"
GET/v1/balanceThe account's money - balance, spend per day, hours left, renewals and warnings to show the user

AI agents

MethodRouteWhat it does
GET/v1/devices/{name}/observeA fresh look at the phone - screenshot, UI tree and the app on screen in one call
POST/v1/devices/{name}/actOne action, then wait until the screen stops changing
POST/v1/devices/{name}/opOne core primitive (the Lusiesta core protocol, one to one)

Screen and input

MethodRouteWhat it does
GET/v1/devices/{name}/screenshotScreen as PNG; with w a smaller JPEG (cached up to 10 s - use /observe for a fresh frame)
POST/v1/devices/{name}/actionOne action on the phone (no waiting)
POST/v1/devices/{name}/inputTouch, key, text, scroll, clipboard, rotate (needs a live stream session)
GET/v1/devices/{name}/logsRecent logcat lines
GET/v1/devices/{name}/streamLive stream numbers - fps, bitrate, viewer lag, ABR rung (a read key is enough)
POST/v1/devices/{name}/streamWebRTC - SDP offer in, SDP answer out; a body with bitrate_kbps pins the quality rung instead (control key)
POST/v1/devices/{name}/stream/probeLatency probe for a live viewer: pulls the notification shade for 600 ms and returns the gateway clock (control key, at most once per 5 s per device)

Network

MethodRouteWhat it does
GET/v1/devices/{name}/networkNetwork country of the device
POST/v1/devices/{name}/networkSet the country the device connects from (time zone and locale follow)
GET/v1/network/optionsWhat can be chosen when creating a device right now - countries and plans

Apps

MethodRouteWhat it does
POST/v1/devices/{name}/apkInstall an APK
GET/v1/appsYour apps - the APKs you uploaded (id, name, size, package, version); there is no catalog of other people's apps
POST/v1/appsUpload your APK once - multipart file=<app.apk> up to 300 MB (or JSON {name, data_b64} up to 50 MB); then install it by id on any of your phones
GET/v1/apps/{id}One of your apps
DELETE/v1/apps/{id}Delete the APK from your storage (phones keep what is installed)
POST/v1/apps/{id}/installInstall your app on running phones - {devices:[…]}; each install runs as a job on its phone

ADB

MethodRouteWhat it does
GET/v1/devices/{name}/adbADB session status
POST/v1/devices/{name}/adbOpen an ADB session through the relay (code
DELETE/v1/devices/{name}/adbClose the ADB session

Files and media

MethodRouteWhat it does
PUT/v1/devices/{name}/filesPut a file on the phone (push) - body is the file, path under /sdcard/ or /data/local/tmp/
POST/v1/devices/{name}/mediaMedia from the library on the phone as if shot with it (push), remove what we put (clean), or list it
GET/v1/mediaThe Library - photos, videos, documents and apps with their ids and folders
POST/v1/mediaUpload a file - multipart file= (photo 25 MB, video 200 MB, document 50 MB, apk 300 MB) or JSON {name, data_b64, folder} up to 50 MB
POST/v1/media/foldersCreate a Library folder - {name}
POST/v1/media/moveMove Library files into a folder - {ids, folder} (folder 0 = none)
POST/v1/media/sendCopy library files into phones' galleries

Webhooks

MethodRouteWhat it does
GET/v1/webhooksWebhooks of this key and the events you can subscribe to (run.completed, run.failed, run.cancelled, run.waiting, device.problem, device.resolved)
POST/v1/webhooksSubscribe an https URL
GET/v1/webhooks/{id}One webhook
DELETE/v1/webhooks/{id}Delete it
POST/v1/webhooks/{id}/rotateNew secret (shown once)
POST/v1/webhooks/{id}/togglePause or resume deliveries
POST/v1/webhooks/{id}/testSend a test event now
GET/v1/webhooks/{id}/deliveriesRecent deliveries with status and response time

Account

MethodRouteWhat it does
GET/v1/usageMinutes of running time per device per day (UTC) for a month
GET/v1/incidentsIncidents on your devices (last 100, newest first)
GET/v1/healthHealth of your devices (measured every 5 minutes)
GET/v1/jobsLast 50 jobs of your devices
GET/v1/jobs/{id}State of a long operation