## Create session

`client.live.create(LiveCreateParamsbody, RequestOptionsoptions?): LiveCreateResponse`

**post** `/live/sessions`

Create a Live WebRTC session. Start with the [Live prompting guide](/api/docs/guides/live-prompting).

### Parameters

- `body: LiveCreateParams`

  - `session: MediaSessionConfig`

    Startup configuration for the Live session.

    - `model: (string & {}) | "gpt-live-1"`

      The Live model. Required in the session configuration for every transport; do not pass it as a URL query parameter.

      - `(string & {})`

      - `"gpt-live-1"`

        - `"gpt-live-1"`

    - `audio?: Audio`

      Startup audio configuration. WebRTC and SIP negotiate their audio format on the media transport.

      - `output?: Output`

        Settings for speech generated by the Live model. Choose the voice before starting the session.

        - `voice?: string | BuiltInVoice | CustomVoice`

          The voice used for Live speech, as a built-in voice name or a custom voice object containing its ID. Defaults to `marin` and cannot change after startup.

          - `string`

          - `BuiltInVoice = "alloy" | "ash" | "ballad" | 19 more`

            A built-in voice available for Live speech.

            - `"alloy"`

            - `"ash"`

            - `"ballad"`

            - `"beacon"`

            - `"bossa"`

            - `"cedar"`

            - `"cinder"`

            - `"coral"`

            - `"delta"`

            - `"echo"`

            - `"gleam"`

            - `"marin"`

            - `"meridian"`

            - `"quartz"`

            - `"ripple"`

            - `"sage"`

            - `"shimmer"`

            - `"stone"`

            - `"tempo"`

            - `"verse"`

            - `"vesper"`

            - `"willow"`

          - `CustomVoice`

            - `id: string`

    - `client?: ClientConfig`

      Startup-only capabilities for an untrusted frontend attached to a unified WebRTC session. Trusted sideband connections are unaffected.

      - `data_channel: DataChannelConfig`

        Client and server event permissions for the WebRTC frontend data channel.

        - `allowed_client_events?: "all" | Array<string>`

          Client event types that the frontend data channel may send. Use 'all' to allow every client event; an empty array allows none. Omission preserves the existing allow-all behavior.

          - `"all"`

            - `"all"`

          - `Array<string>`

        - `allowed_server_events?: "all" | Array<ServerEventSelector>`

          Server events that may be sent to the frontend data channel. Use 'all' to allow every server event; an empty array allows none. Omission preserves the existing allow-all behavior. Responses events use an object with type 'response.event' and a response_event selector.

          - `"all"`

            - `"all"`

          - `Array<ServerEventSelector>`

            - `type: string`

              The outer Live server event type. Use 'response.event' for Responses events.

            - `response_event?: string`

              The nested Responses event type. Required when type is 'response.event'; forbidden for other event types.

    - `delegation?: ClientDelegation | Responses | null`

      Who handles tasks delegated by the Live model. Omitted or null selects your application; use `responses` to let the API manage a Responses backend.

      - `ClientDelegation`

        Delegate tasks to your application. The Live session emits delegation events that your backend handles.

        - `type: "client"`

          The delegation owner. Always `client` for tasks handled by your application.

          - `"client"`

      - `Responses`

        Delegate tasks to a Responses model managed by the Live session.

        - `responses: ResponsesDelegationConfig`

          Backend model, prompt, and tools used when the Live session delegates a task to Responses.

          - `model: string`

            The model used for server-owned Responses delegations.

          - `instructions?: string | null`

            Instructions for the delegated Responses model, separate from Live instructions. See [backend prompting](/api/docs/guides/live-delegation#start-with-your-existing-backend-prompt).

          - `max_output_tokens?: number | null`

            Maximum number of output tokens for each delegated response.

          - `parallel_tool_calls?: boolean | null`

            Whether the delegated Responses model may request multiple tool calls in a single response.

          - `reasoning?: Reasoning | null`

            Reasoning settings passed to each delegated Responses request.

            - `effort?: "none" | "minimal" | "low" | 3 more | null`

              How much reasoning effort the delegated Responses model should use. Supported values depend on the backend model.

              - `"none"`

              - `"minimal"`

              - `"low"`

              - `"medium"`

              - `"high"`

              - `"xhigh"`

            - `summary?: "concise" | "detailed" | "auto" | null`

              The reasoning summary to request from the delegated Responses model, when supported.

              - `"concise"`

              - `"detailed"`

              - `"auto"`

          - `service_tier?: "auto" | "default" | "fast_tier_temp_pilot" | 3 more | null`

            Service tier for delegated Responses requests.

            - `"auto"`

            - `"default"`

            - `"fast_tier_temp_pilot"`

            - `"flex"`

            - `"priority"`

            - `"ultrafast"`

          - `text?: Text | null`

            Text generation settings passed to each delegated Responses request.

            - `verbosity?: "low" | "medium" | "high" | null`

              The amount of detail in text generated by the Responses backend. This does not configure the Live model’s spoken delivery.

              - `"low"`

              - `"medium"`

              - `"high"`

          - `tool_choice?: "auto" | "none" | "required" | LiveFunctionToolChoiceParam | LiveMCPToolChoiceParam`

            Controls which tool the Responses backend uses when handling a task delegated by the Live model.

            - `"auto" | "none" | "required"`

              - `"auto"`

              - `"none"`

              - `"required"`

            - `LiveFunctionToolChoiceParam`

              - `name: string`

              - `type: "function"`

                - `"function"`

            - `LiveMCPToolChoiceParam`

              - `name: string`

              - `server_label: string`

              - `type: "mcp"`

                - `"mcp"`

          - `tools?: Array<FunctionTool | WebSearch>`

            Tools available to the Responses backend while it handles tasks delegated by the Live model.

            - `FunctionTool`

              A function tool available to the Responses backend when the Live model delegates a task.

              - `name: string`

                The name the delegated Responses model uses when calling this function.

              - `type: "function"`

                The tool type. Always `function`.

                - `"function"`

              - `description?: string | null`

                What the function does and when the delegated Responses model should call it.

              - `parameters?: Record<string, unknown> | null`

                A JSON Schema object describing the arguments accepted by the function.

              - `strict?: boolean | null`

                Whether the delegated Responses model must follow the function’s parameter schema exactly.

            - `WebSearch`

              A web search tool available to the Live session’s Responses backend.

              - `type: "web_search"`

                The tool type. Always `web_search`.

                - `"web_search"`

        - `type: "responses"`

          The delegation owner. Always `responses` for tasks handled by the Responses API.

          - `"responses"`

    - `input?: Array<InitialItem>`

      Ordered text-only history supplied before startup. Supports developer, user, and assistant messages with one text part each; at most 128 messages and 8,192 rendered tokens in total.

      - `Developer`

        A developer message included in the initial text history of a Live session.

        - `content: Array<Content>`

          The message content. Supply exactly one text part for the initial Live conversation history.

          - `text: string`

            The message text to include in the Live session’s initial conversation history.

          - `type?: "input_text"`

            The text content type. Always `input_text`.

            - `"input_text"`

        - `role: "developer"`

          The author of this history message. Always `developer`.

          - `"developer"`

        - `id?: string | null`

          An optional identifier for the supplied history message. Live uses the message’s role and text to initialize the conversation.

        - `status?: "incomplete" | "completed" | null`

          The supplied message’s status. Live uses its text as history and does not resume an incomplete message.

          - `"incomplete"`

          - `"completed"`

        - `type?: "message"`

          The history item type. Always `message`.

          - `"message"`

      - `User`

        A user message included in the initial text history of a Live session.

        - `content: Array<Content>`

          The message content. Supply exactly one text part for the initial Live conversation history.

          - `text: string`

            The message text to include in the Live session’s initial conversation history.

          - `type?: "input_text"`

            The text content type. Always `input_text`.

            - `"input_text"`

        - `role: "user"`

          The author of this history message. Always `user`.

          - `"user"`

        - `id?: string | null`

          An optional identifier for the supplied history message. Live uses the message’s role and text to initialize the conversation.

        - `status?: "incomplete" | "completed" | null`

          The supplied message’s status. Live uses its text as history and does not resume an incomplete message.

          - `"incomplete"`

          - `"completed"`

        - `type?: "message"`

          The history item type. Always `message`.

          - `"message"`

      - `Assistant`

        An assistant message included in the initial text history of a Live session.

        - `content: Array<Text | OutputText>`

          The message content. Supply exactly one text part for the initial Live conversation history.

          - `Text`

            Assistant text supplied as conversation history when starting a Live session.

            - `text: string`

              The message text to include in the Live session’s initial conversation history.

            - `type?: "text"`

              The text content type. Always `text`.

              - `"text"`

          - `OutputText`

            Assistant output text supplied as conversation history when starting a Live session.

            - `text: string`

              The message text to include in the Live session’s initial conversation history.

            - `type: "output_text"`

              The text content type. Always `output_text`.

              - `"output_text"`

        - `role: "assistant"`

          The author of this history message. Always `assistant`.

          - `"assistant"`

        - `id?: string | null`

          An optional identifier for the supplied history message. Live uses the message’s role and text to initialize the conversation.

        - `status?: "incomplete" | "completed" | null`

          The supplied message’s status. Live uses its text as history and does not resume an incomplete message.

          - `"incomplete"`

          - `"completed"`

        - `type?: "message"`

          The history item type. Always `message`.

          - `"message"`

    - `instructions?: string | null`

      Frontend instructions for voice, conversation, interruptions, and when to delegate. Start with the [Live prompting guide](/api/docs/guides/live-prompting); put business rules and tool workflows in a separate [backend prompt](/api/docs/guides/live-delegation#start-with-your-existing-backend-prompt). Limited to 16,384 client-supplied tokens. Omitted or blank instructions use server defaults. Immutable after startup.

    - `store?: boolean`

      Whether to store the session for later forking and recording download. Defaults to false for new sessions.

  - `transport: Transport`

    WebRTC transport with the browser's SDP offer.

    - `sdp: string`

      Session Description Protocol message for the WebRTC connection.

    - `type: "webrtc"`

      The transport used for the Live session. Always `webrtc`.

      - `"webrtc"`

### Returns

- `LiveCreateResponse`

  The created Live session identifier and WebRTC answer. Apply transport.sdp as the peer's remote answer and wait for session.started on the data channel before sending commands.

  - `session: Session`

    The newly created Live session. Use its ID for session controls and sideband connections.

    - `id: string`

      Opaque session identifier. Preserve the returned value unchanged, including its prefix.

  - `transport: Transport`

    WebRTC transport with the SDP answer.

    - `sdp: string`

      Session Description Protocol message for the WebRTC connection.

    - `type: "webrtc"`

      The transport used for the Live session. Always `webrtc`.

      - `"webrtc"`

### Example

```typescript
import OpenAI from 'openai';

const client = new OpenAI({
  apiKey: process.env['OPENAI_API_KEY'], // This is the default and can be omitted
});

const live = await client.live.create({
  session: { model: 'gpt-live-1' },
  transport: { sdp: 'x', type: 'webrtc' },
});

console.log(live.session);
```

#### Response

```json
{
  "session": {
    "id": "live_123"
  },
  "transport": {
    "type": "webrtc",
    "sdp": "<SDP answer>"
  }
}
```
