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:
bashbun add @opendoor/sdk
Chat
tsimport { 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
tsconst 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
tsimport OpenAI from "openai"; const client = new OpenAI({ apiKey: process.env.OPENDOOR_API_KEY, baseURL: "https://opendoor-gcp.web.app/v1", });
Models, Search, OpenBot
tsawait 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.