Docs

Call the OpenDoor gateway from Node, Bun, or the browser with @opendoor/sdk.

JavaScript SDK

@opendoor/sdk is a fetch client in packages/sdk. It reads OPENDOOR_API_KEY and OPENDOOR_BASE_URL (gateway origin, no /v1 suffix).

Install

From this monorepo:

bash
bun add @opendoor/sdk

Chat

ts
import { OpenDoor } from "@opendoor/sdk"; const client = new OpenDoor({ apiKey: process.env.OPENDOOR_API_KEY, baseURL: process.env.OPENDOOR_BASE_URL ?? "https://opendoor-gcp.web.app", }); const chat = await client.chat.completions.create({ model: "gemma-4-26b-a4b-it", messages: [{ role: "user", content: "Hello from OpenDoor" }], }); console.log(chat.choices[0]?.message.content);

provider is OpenRouter-shaped: { order, allow_fallbacks, sort, only, ignore }. Omit it for the gateway default.

Streaming

ts
const stream = await client.chat.completions.create({ model: "gemma-4-26b-a4b-it", messages: [{ role: "user", content: "Hello" }], stream: true, }); for await (const chunk of stream) { const token = chunk.choices[0]?.delta?.content; if (token) process.stdout.write(token); }

OpenAI SDK

ts
import OpenAI from "openai"; const client = new OpenAI({ apiKey: process.env.OPENDOOR_API_KEY, baseURL: "https://opendoor-gcp.web.app/v1", });

Models, Search, OpenBot

ts
await client.models.list(); await client.plugins.webSearch({ query: "OpenDoor LLM gateway", max_results: 5 }); const agent = await client.agents.create({ name: "Desk", runtime: "openbot", modelId: "gemma-4-26b-a4b-it", }); const turn = await client.agents.chat(agent.id, { message: "Open https://example.com and summarize the page.", }); await client.agents.computer(agent.id, "take");

Search is Vertex grounding at $0.10 / query (included on Enterprise). Agents need the Agents add-on. See Search and Agents.

client.catalog.list() is GET /v1/catalog — every mounted /v1 path.

Errors: OpenDoorError with .status and .body. See Errors and Python SDK.