Every action in the dashboard, and every action the AI takes, is a REST call you can make yourself.
One bearer token per account, created and rotated from the dashboard. Send it on every request.
# base url · full reference: /docs/reference/ · spec: /docs/openapi-v1.yaml https://api.clousd.com/v1 # every request Authorization: Bearer cl_live_your_key
Rotating a key takes effect immediately. The previous key stops working the moment the new one is issued, so swap it in your scripts first.
The full set is in the docs. These are the ones you will use on day one.
| Method | Path | What it does |
|---|---|---|
| GET | /devices | List your devices and their state |
| GET | /devices/{name} | Read one device |
| POST | /devices/{name}/start | Start a stopped device → 202 + job |
| POST | /devices/{name}/stop | Stop a running device → 202 + job |
| POST | /devices/{name}/restart | Restart a device → 202 + job |
| GET | /devices/{name}/screenshot | Screen as PNG (JPEG with ?w=160) |
| POST | /devices/{name}/action | Open an app or URL, tap, swipe, type, press a key |
| POST | /devices/{name}/input | Raw touch, key, text, rotate over a live stream |
| POST | /devices/{name}/apk | Install an APK |
| GET · POST | /devices/{name}/network | Read or change the exit (mobile, residential, ISP, datacenter, own proxy) |
| POST | /devices/{name}/network/rotate | New IP |
| GET · POST | /devices/{name}/snapshots | List snapshots · take one → 202 + job |
| POST | /devices/{name}/snapshots/{id}/restore | Restore a snapshot → 202 + job |
| GET | /health | Health of your devices |
| GET | /jobs/{id} | Result of a long operation |
Creating devices happens in the dashboard for now; everything after that is the API. Long operations answer 202 with a job you can poll.
curl https://api.clousd.com/v1/devices \ -H "Authorization: Bearer cl_live_your_key" curl -X POST https://api.clousd.com/v1/devices/p2/restart \ -H "Authorization: Bearer cl_live_your_key"
202 Accepted { "ok": true, "job": { "id": "3f9c1a…", "kind": "restart", "phone": "p2", "state": "running" } } GET /jobs/3f9c1a… → "state": "done"
Standard HTTP status codes, with a machine-readable reason in the body.
Access is opening in stages. Put your name down and we will get you in.