---
title: "Create session"
method: POST
path: "/live/sessions"
tags: ["Live"]
---

# Create session

`POST /live/sessions`

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

## Request body

- LiveCreateRequest — Create a Live WebRTC session with JSON session configuration and an SDP offer. Follow the [Live prompting guide](https://developers.openai.com/api/docs/guides/live-prompting) before choosing frontend and backend instructions. The request starts the session; do not send session.start on the data channel.
  - `session` LiveMediaSessionCreateParams, required — Startup configuration for a Live media session. Follow the [Live prompting guide](https://developers.openai.com/api/docs/guides/live-prompting) when writing frontend instructions and the backend prompt under delegation.responses.instructions.
    - `model` union, required — The Live model. Required in the session configuration for every transport; do not pass it as a URL query parameter.
      - string
      - 'gpt-live-1'
    - `instructions` string, nullable — Frontend instructions for voice, conversation, interruptions, and when to delegate. Start with the [Live prompting guide](https://developers.openai.com/api/docs/guides/live-prompting); put business rules and tool workflows in a separate [backend prompt](https://developers.openai.com/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.
    - `audio` LiveMediaSessionAudioParam — Startup audio output configuration. WebRTC and SIP negotiate the media format; audio.format is only accepted for primary WebSockets. Voice cannot change after startup.
      - `output` LiveInitialSessionAudioOutputParam — Settings for speech generated by the Live model. Choose the voice before starting the session.
        - `voice` union — 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.
          - union
            - string
            - 'alloy' | 'ash' | 'ballad' | 'beacon' | 'bossa' | 'cedar' | 'cinder' | 'coral' | 'delta' | 'echo' | 'gleam' | 'marin' | 'meridian' | 'quartz' | 'ripple' | 'sage' | 'shimmer' | 'stone' | 'tempo' | 'verse' | 'vesper' | 'willow'
          - LiveCustomVoiceParam
            - `id` string, required
    - `delegation` union
      - LiveClientDelegationParam — Delegate tasks to your application. The Live session emits delegation events that your backend handles.
        - `type` 'client', required — The delegation owner. Always `client` for tasks handled by your application.
      - LiveResponsesDelegationParam — Delegate tasks to a Responses model managed by the Live session.
        - `type` 'responses', required — The delegation owner. Always `responses` for tasks handled by the Responses API.
        - `responses` LiveResponsesDelegationSettingsInputParam, required — Model, prompt, and tool settings for tasks delegated by the Live session to a Responses backend.
          - `model` string, required — The model used for server-owned Responses delegations.
          - `instructions` string, nullable — Instructions for the delegated Responses model, separate from Live instructions. See [backend prompting](https://developers.openai.com/api/docs/guides/live-delegation#start-with-your-existing-backend-prompt).
          - `max_output_tokens` integer, nullable — Maximum number of output tokens for each delegated response.
          - `service_tier` 'auto' | 'default' | 'fast_tier_temp_pilot' | 'flex' | 'priority' | 'ultrafast'
          - `reasoning` LiveDelegationReasoningInputParam — Reasoning options for Responses requests made on behalf of the Live session.
            - `effort` 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh'
            - `summary` 'concise' | 'detailed' | 'auto'
          - `text` LiveDelegationTextInputParam — Text generation options for the Live session’s Responses backend.
            - `verbosity` 'low' | 'medium' | 'high'
          - `tools` union[] — Tools available to the Responses backend while it handles tasks delegated by the Live model.
            - union
              - …
          - `tool_choice` union — Controls which tool the Responses backend uses when handling a task delegated by the Live model.
            - 'auto' | 'none' | 'required'
            - LiveFunctionToolChoiceParam
              - …
            - LiveMCPToolChoiceParam
              - …
          - `parallel_tool_calls` boolean, nullable — Whether the delegated Responses model may request multiple tool calls in a single response.
    - `store` boolean — Whether to store the session for later forking and recording download. Defaults to false for new sessions.
    - `input` LiveInitialItem[] — 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.
      - union — A developer, user, or assistant message supplied as text history before the Live session starts.
        - LiveInitialDeveloperMessageItemParam — A developer message included in the initial text history of a Live session.
          - `id` string, nullable — An optional identifier for the supplied history message. Live uses the message’s role and text to initialize the conversation.
          - `type` 'message' — The history item type. Always `message`.
          - `status` 'incomplete' | 'completed'
          - `role` 'developer', required — The author of this history message. Always `developer`.
          - `content` LiveInitialInputTextContentPartParam[], required — The message content. Supply exactly one text part for the initial Live conversation history.
            - `type` 'input_text' — The text content type. Always `input_text`.
            - `text` string, required — The message text to include in the Live session’s initial conversation history.
        - LiveInitialUserMessageItemParam — A user message included in the initial text history of a Live session.
          - `id` string, nullable — An optional identifier for the supplied history message. Live uses the message’s role and text to initialize the conversation.
          - `type` 'message' — The history item type. Always `message`.
          - `status` 'incomplete' | 'completed'
          - `role` 'user', required — The author of this history message. Always `user`.
          - `content` LiveInitialInputTextContentPartParam[], required — The message content. Supply exactly one text part for the initial Live conversation history.
            - `type` 'input_text' — The text content type. Always `input_text`.
            - `text` string, required — The message text to include in the Live session’s initial conversation history.
        - LiveInitialAssistantMessageItemParam — An assistant message included in the initial text history of a Live session.
          - `id` string, nullable — An optional identifier for the supplied history message. Live uses the message’s role and text to initialize the conversation.
          - `type` 'message' — The history item type. Always `message`.
          - `status` 'incomplete' | 'completed'
          - `role` 'assistant', required — The author of this history message. Always `assistant`.
          - `content` union[], required — The message content. Supply exactly one text part for the initial Live conversation history.
            - union
              - …
    - `client` LiveClientConfigParam — Startup-only capabilities for an untrusted frontend attached to a unified WebRTC session. Trusted sideband connections are unaffected.
      - `data_channel` LiveDataChannelConfigParam, required — Control which Live events an untrusted WebRTC frontend can send and receive over its data channel. These restrictions do not apply to trusted sideband connections.
        - `allowed_client_events` union — 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'
          - string[]
        - `allowed_server_events` union — 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'
          - LiveAllowedServerEventParam[]
            - `type` string, required — 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.
  - `transport` LiveWebRTCTransport, required — WebRTC transport carrying the offer SDP in a creation request or answer SDP in its response.
    - `type` 'webrtc', required — The transport used for the Live session. Always `webrtc`.
    - `sdp` string, required — Session Description Protocol message for the WebRTC connection.

## Response `201`

Live session created with a WebRTC answer.

- 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` object, required — The newly created Live session. Use its ID for session controls and sideband connections.
    - `id` string, required — Opaque session identifier. Preserve the returned value unchanged, including its prefix.
  - `transport` LiveWebRTCTransport, required — WebRTC transport carrying the offer SDP in a creation request or answer SDP in its response.
    - `type` 'webrtc', required — The transport used for the Live session. Always `webrtc`.
    - `sdp` string, required — Session Description Protocol message for the WebRTC connection.

## Other responses

- `400` — Invalid Live session request.
- `413` — The Live session request exceeds the supported size limit.
- `429` — The session could not start because a rate or quota limit was exceeded.
- `500` — An internal error occurred. The response body is plain text.
- `503` — The session is temporarily unavailable.

## Changes

- **2026-09-25** `d86203de41ae` — 5 info
  - added the non-success response with the status `400`
  - added the non-success response with the status `413`
  - added the non-success response with the status `429`
  - added the non-success response with the status `500`
  - …1 more
- **2026-09-10** `d3c0cb1ebbed` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/openai/apis/openapi/changes/live/sessions/post.md)

---

[API](https://skmtc.dev/openai/apis/openapi.md) · [All operations](https://skmtc.dev/openai/apis/openapi/llms.txt) · [OpenAPI document](https://skmtc.dev/openai/apis/openapi/revisions/d86203de41ae?raw)
