Docs · Quick start

A cloud device in three calls.

Grab an API key from the dashboard, install an SDK, and launch your first device. Everything here maps 1:1 to what the dashboard does.

Get an API key

1 · Install

TypeScript and Python SDKs, plus a CLI.

npm install @flickly/sdk

2 · Launch, install, control

Upload an APK, boot a device, drive it — then stop it.

import { Flickly } from "@flickly/sdk";

const client = new Flickly(process.env.FLICKLY_KEY);

// 1. upload an APK (or reuse one you've uploaded before)
const app = await client.apps.upload("./build/app-release.apk");

// 2. launch a device and install the app
const session = await client.sessions.create({ appId: app.id });
await client.sessions.waitUntilReady(session.id);

// 3. drive it — or open session.streamUrl in a browser
await client.sessions.input.tap(session.id, { x: 540, y: 1180 });

// 4. clean up (or let the idle timeout do it)
await client.sessions.stop(session.id);

API reference

Versioned REST under /v1. Bearer-key auth, idempotency keys on create, structured errors, and rate limits.

POST/v1/sessions
GET/v1/sessions
GET/v1/sessions/{id}
DELETE/v1/sessions/{id}
POST/v1/sessions/{id}/apps
POST/v1/apps
GET/v1/apps
GET/v1/usage

Streaming runs over a separate WSS channel with a short-lived, session-scoped token from GET /v1/sessions/{id}.

Webhooks

Subscribe to session lifecycle events instead of polling.

event session.ready
event session.stopped
event session.failed
event app.ready
event usage.threshold