Manual

Lifecycle and errors

Apply consistent client ownership, asynchronous execution, retries, cancellation, and shutdown.

Client and session ownership

Create clients at an application-service boundary rather than once per request. A device session belongs to one client and must not outlive it. Disconnect should tolerate a partially connected session, and repeated shutdown must not double-free resources or emit duplicate terminal events.

Error categories

All packages distinguish invalid arguments, invalid state, timeout, authentication, transport, protocol, unsupported capability, platform failure, cancellation, memory exhaustion, and internal failure. Preserve the stable SDK category in application telemetry. Treat raw HTTP status and response text as diagnostic context only.

Retry policy

Retry only operations documented as idempotent or safe to repeat. Use bounded exponential backoff with jitter for temporary transport failures and 429 or 5xx responses. Do not automatically repeat direct media upload authorization, clip deletion, device activation, or command operations without an idempotency guarantee. Respect server retry guidance where provided.

Cancellation

Propagate application cancellation through Kotlin coroutines, Swift tasks, Go contexts, JavaScript abort signals where supported, and native cancellation callbacks. Native streaming upload checks cancellation between buffer reads and reports bytes already sent. Cancellation is not a successful upload; query the upload state before deciding whether to resume or start again.

Callbacks and threads

Assume callback payloads remain valid only for the callback duration unless the API states otherwise. Do not destroy a client from its currently dispatching callback. Move UI updates to the platform main thread and keep callback work bounded.

Other manual chapters

Continue with related manual sections.

SDK overview

Choose the right package and understand support boundaries.

Open section

Getting started

Install an SDK, configure a client, and complete a first request.

Open section

Authentication and security

Handle bearer tokens, PKI, TLS, keys, and sensitive media safely.

Open section

Capability workflows

Integrate provisioning, devices, telemetry, OTA, commands, and signaling.

Open section

Video Cloud workflows

Integrate Live WebRTC signaling and encrypted stored-video upload, browsing, and playback.

Open section

Native C and C++ SDK

Use the stable C ABI, thin C++ wrapper, transports, and streaming uploads.

Open section

Android Kotlin SDK

Use Kotlin APIs, coroutines, Media3 playback, and secure key providers.

Open section

iOS Swift SDK

Use Swift APIs, async operations, AVPlayer, Keychain, and Secure Enclave boundaries.

Open section

JavaScript and TypeScript SDK

Integrate the typed ESM package in browser and Node.js applications.

Open section

Go SDK

Use the pure Go client for devices, tools, and automation.

Open section

FreeRTOS and Pro2 SDK

Integrate board adapters, device transport, and WebRTC answerer boundaries.

Open section

Sample applications

Build and use the Android, iOS, Web, Linux, and Pro2 reference samples.

Open section

Troubleshooting and compatibility

Diagnose common integration problems and identify deprecated behavior.

Open section