Skip to content
For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Primary navigation

Connect

Connect to Live without query parameters. Send session.start with model and session configuration, then wait for session.started. Follow the Live prompting guide before writing instructions.

WebSocket wss://api.openai.com/v1/live/sessions

Connect

import OpenAI from "openai";
import { LiveWS } from "openai/resources/live/ws";

// New primary session; model belongs in session.start, not the URL.
const connection = new LiveWS(new OpenAI());
let observed = false;
let closeRequested = false;
// A missing terminal event must never be reported as successful completion.
const timer = setTimeout(() => connection.close(), 60_000);
try {
  for await (const entry of connection) {
    if (entry.type === "open") {
      connection.send({
        type: "session.start",
        session: { model: "gpt-live-1" },
      });
    } else if (entry.type === "error") {
      throw new Error("Live reported a session error.");
    } else if (entry.type === "message") {
      const event = entry.message;
      if (event.type === "error")
        throw new Error("Live reported a session error.");
      if (event.type === "session.started") {
        // Wait for startup before closing the session this example owns.
        console.log("Session ready:", event.session.id, event.session.model);
        connection.send({ type: "session.close" });
        closeRequested = true;
      } else if (event.type === "session.closed") {
        if (!closeRequested || event.reason !== "close_requested") {
          throw new Error(
            "Session ended unexpectedly: " +
              event.reason +
              "; usage=" +
              JSON.stringify(event.usage),
          );
        }
        console.log("Final usage:", event.usage);
        observed = true;
        break;
      }
    }
  }
  if (!observed)
    throw new Error(
      "Connection closed before session.closed; final usage unconfirmed",
    );
} finally {
  clearTimeout(timer);
  // Release the transport after the terminal event or an error.
  connection.close();
}