DocsStart

BEEOS CLOUD / DEVELOPER REFERENCE

Cloud quickstart

Create a BYOK instance and send a Response from a product backend

Use the Server SDK from trusted backend code. Use Server SDK 2.0.0. Set BEEOS_CLOUD_API_URL to https://api.cloud.beeos.ai/v1 (or your environment’s /v1 URL), a bsk_ server key in BEEOS_API_KEY, and an app-local BEEOS_EXTERNAL_USER_ID mapped from the authenticated product user. TypeScript and Python expose BeeOSClient with typed resource methods and results.

Create a managed instance

Select a published variant_id from GET /v1/instance-templates and put it in BEEOS_VARIANT_ID. For OpenClaw or Hermes, supply BYOK llm.providers and llm.models: each model references a provider ID, with exactly one default at order 0. The provider protocol is openai or anthropic; use its matching base URL and your own provider key. This example uses the OpenAI protocol.

AgentBay and BeeOS browser/mobile variants run without a Cloud-injected model: omit the entire llm block for those model-free frameworks. Do not send retired model_primary or model_credential fields. Keep provider keys in backend configuration; never log BYOK request bodies.

Python: pip install beeos-cloud-sdk==2.0.0.

import { BeeOSClient } from "@beeos-ai/cloud-sdk";

const cloud = new BeeOSClient({
  baseURL: process.env.BEEOS_CLOUD_API_URL!, // https://api.cloud.beeos.ai/v1
  apiKey: process.env.BEEOS_API_KEY!, // bsk_…, backend only
}).withExternalUser(process.env.BEEOS_EXTERNAL_USER_ID!);

const created = await cloud.instances.create({
  name: "assistant-prod",
  variant_id: process.env.BEEOS_VARIANT_ID!,
  llm: {
    providers: [{
      id: "my-provider",
      protocol: "openai",
      base_url: process.env.BEEOS_MODEL_PROVIDER_URL!,
      api_key: process.env.BEEOS_MODEL_PROVIDER_API_KEY!,
    }],
    models: [{
      provider_id: "my-provider",
      model: process.env.BEEOS_MODEL_ID!,
      role: "default",
      order: 0,
    }],
  },
}, crypto.randomUUID());
console.log(created.data.id);

Send work after readiness

Creation returns 202 with data.id and an operation; it does not mean the instance is ready. Use cloud.instances.getStatus(created.data.id) (Python: cloud.instances.get_status(created["data"]["id"])) until it is running, then use cloud.harnesses.list() to select its ready harness. The SDK sends the external-user header and uses /uhp/v1/harnesses. Set BEEOS_HARNESS_ID to that harness ID; it is distinct from the instance ID. Surface provisioning and readiness failures to your product backend.

The following code continues with the scoped cloud client from above:

const response = await cloud.responses.create({
  input: "Hello",
  metadata: { harness_id: process.env.BEEOS_HARNESS_ID! },
}, crypto.randomUUID());
console.log(response.id, response.status, response.output);

A Response has its own ID, status, and output. For another turn, pass previous_response_id; for background work, set background: true and retrieve progress with cloud.responses.get(response.id) (Python: cloud.responses.get(response["id"])). The Harness SDK handles work inside the running process.

Return product-visible results through your backend and its authenticated user channel. The frontend never receives the server key or provider keys; see product frontend integration.