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

# Create session

`POST /live/sessions`

## Request

- Base URL: `https://api.openai.com/v1`
- URL: `https://api.openai.com/v1/live/sessions`
- Auth: HTTP bearer

Create a Live WebRTC session or place an outbound SIP call. Start with the
[Live prompting guide](https://developers.openai.com/api/docs/guides/live-prompting) for session configuration
and [Telephony and SIP](https://developers.openai.com/api/docs/guides/voice-sip?api=live#place-an-outbound-call)
for trunk setup and call monitoring.

Set transport.type to `webrtc` and supply an SDP offer, or set it to `sip`
and supply an E.164 destination and trunk credentials. Outbound SIP calling
must be enabled for your organization.
Ringing is limited to 3 minutes and connected calls to 2 hours; these limits
are not configurable in the request.

Returns `201 Created` after session initialization. WebRTC responses include an
SDP answer. SIP responses do not wait for the callee to answer. Attach a
sideband connection using session.id to monitor SIP call progress.

Each SIP request creates a new call. If a request times out or the connection
fails, retry with caution: the original request may have succeeded, and a
retry can place another call.

## Request body

- LiveSessionCreateRequest: Create a Live session with a WebRTC SDP offer or place an outbound SIP call. 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 again on the data channel or sideband.
  - `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' | 'brise' | 'cedar' | 'cinder' | 'coral' | 'delta' | 'echo' | 'flitz' | 'gleam' | 'harema' | 'juni' | 'marin' | 'meridian' | 'nira' | 'noeul' | 'nuri' | 'quartz' | 'ripple' | 'sage' | 'shida' | 'shimmer' | 'sillage' | '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.
        - `acknowledgement_delay_ms` integer: Milliseconds to wait before requesting an automatic spoken acknowledgement for a delegation. The model may still speak before this delay. Any commentary or thinking appended to the session cancels all pending acknowledgements, including those for other delegations. Defaults to 400 for Decisions sessions and 0 (request immediately) for other sessions. Omission in a session update preserves the current value. Updates apply to subsequent delegations.
        - `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.
        - `acknowledgement_delay_ms` integer: Milliseconds to wait before requesting an automatic spoken acknowledgement for a delegation. The model may still speak before this delay. Any commentary or thinking appended to the session cancels all pending acknowledgements, including those for other delegations. Defaults to 400 for Decisions sessions and 0 (request immediately) for other sessions. Omission in a session update preserves the current value. Updates apply to subsequent delegations.
        - `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
              - …
            - LiveSpecificFileSearchParam
              - …
            - LiveSpecificWebSearchParam
              - …
            - LiveSpecificWebSearchPreviewParam
              - …
            - LiveSpecificImageGenParam
              - …
            - LiveSpecificComputerParam
              - …
            - LiveSpecificCodeInterpreterParam
              - …
            - LiveSpecificProgrammaticToolCallingParam
              - …
            - LiveSpecificFunctionShellParam: Forces the model to call the shell tool when a tool call is required.
              - …
            - LiveSpecificCustomToolParam
              - …
            - LiveSpecificApplyPatchParam: Forces the model to call the apply_patch tool when executing a tool call.
              - …
            - LiveAllowedToolsChoiceParam
              - …
          - `parallel_tool_calls` boolean, nullable: Whether the delegated Responses model may request multiple tool calls in a single response.
      - LiveDecisionsDelegationParam
        - `acknowledgement_delay_ms` integer: Milliseconds to wait before requesting an automatic spoken acknowledgement for a delegation. The model may still speak before this delay. Any commentary or thinking appended to the session cancels all pending acknowledgements, including those for other delegations. Defaults to 400. Updates apply to subsequent delegations.
        - `type` 'decisions', required
        - `decisions` LiveDecisionsSettingsInputParam, required
          - `questions` LiveDecisionQuestion[], required: Native Decision API questions evaluated together, in order.
            - union
              - …
          - `model` string, required
    - `triggers` LiveDecisionTriggerInputParam[]: At most one Decisions trigger per transcript event type. Triggers run independently of delegation. On update, omit triggers to keep the current configuration, send a list to replace it, or send an empty list to disable triggers.
      - `type` 'decisions', required
      - `event_type` 'session.input_transcript.delta' | 'session.output_transcript.delta', required
      - `decisions` LiveDecisionQuestionsInputParam, required: Questions evaluated using the current transcript and the session's shared Decision items.
        - `questions` LiveDecisionQuestion[], required: Native Decision API questions evaluated together, in order.
          - union
            - LiveDecisionChoiceQuestionParam
              - …
            - LiveDecisionPredicateQuestionParam
              - …
            - LiveDecisionScoreQuestionParam
              - …
    - `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 a configured rendered-token limit (8,192 by default).
      - 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` union, required: WebRTC transport with an SDP offer, or SIP transport with a destination and per-call trunk credentials.
    - LiveWebRTCTransport: 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.
    - LiveSIPTransport: Place an outbound SIP call using your provider's trunk. Outbound SIP calling must be enabled for your organization. The trunk must support TLS signaling, Opus audio, and SDES-SRTP media. See [Telephony and SIP](https://developers.openai.com/api/docs/guides/voice-sip?api=live#place-an-outbound-call).
      - `type` 'sip', required: The transport used for the Live session. Always `sip`.
      - `destination` string, required: Phone number to call in E.164 format. SIP URI destinations are not supported.
      - `trunk` LiveSIPTrunk, required: SIP trunk configuration supplied for this call. Keep trunk credentials on your server. The creation response does not return this configuration.
        - `provider_url` string, required: Provider endpoint in the form `sips:host[:port][;transport=tcp]`. The default port is 5061. IPv6 addresses must be bracketed. TLS signaling is required; plaintext SIP is not supported. Do not include userinfo, a path, URI headers, or other URI parameters. Local hostnames and literal private, loopback, link-local, unspecified, multicast, and broadcast IP addresses are rejected.
        - `auth` LiveSIPTrunkAuth, required: Credentials for SIP Digest authentication with your trunk provider.
          - `type` 'digest', required: Use `digest` for SIP Digest authentication. Handles 401 and 407 challenges.
          - `username` string, required: Provider username. Must contain a non-whitespace character, be at most 256 bytes, and contain no CR, LF, or NUL.
          - `password` string, required: Provider password. Must be at most 4096 bytes and contain no CR, LF, or NUL.
        - `caller_number` string, required: Caller phone number in E.164 format to use in the SIP From header.

## Response `201`

Returns 201 Created with a WebRTC answer or an initialized outbound SIP session. A SIP response does not mean the callee has answered.

- LiveSessionCreateResponse: The created Live session and its transport. WebRTC creation returns 201 Created with an SDP answer. Outbound SIP creation returns 201 Created after initialization, before the callee necessarily answers, without SDP or trunk credentials.
  - `session` Session, 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` union, required: WebRTC transport with an SDP answer, or SIP transport without SDP or trunk credentials. For SIP, attach a sideband using session.id to receive transport.ringing, transport.answered, and transport.failed notifications.
    - LiveWebRTCTransport: 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.
    - object: The SIP transport. Trunk credentials and SDP are not returned.
      - `type` 'sip', required: The transport used for the Live session. Always `sip`.

## 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.
- `502`: The SIP gateway could not initialize the outbound call.
- `503`: The session is temporarily unavailable.
- `504`: SIP session initialization timed out. The error code is sip_setup_timeout.

## Changes

- **2026-10-24** `69448733efdb`: 6 info
  - request property `session/delegation/anyOf[subschema #1]/oneOf[#/components/schemas/LiveDecisionsDelegationParam]/decisions/questions/items/oneOf[#/components/schemas/LiveDecisionChoiceQuestionParam]/instructions` list-of-types was widened by adding types `array` to media type `application/json`
  - request property `session/delegation/anyOf[subschema #1]/oneOf[#/components/schemas/LiveDecisionsDelegationParam]/decisions/questions/items/oneOf[#/components/schemas/LiveDecisionPredicateQuestionParam]/instructions` list-of-types was widened by adding types `array` to media type `application/json`
  - request property `session/delegation/anyOf[subschema #1]/oneOf[#/components/schemas/LiveDecisionsDelegationParam]/decisions/questions/items/oneOf[#/components/schemas/LiveDecisionScoreQuestionParam]/instructions` list-of-types was widened by adding types `array` to media type `application/json`
  - request property `session/triggers/items/decisions/questions/items/oneOf[#/components/schemas/LiveDecisionChoiceQuestionParam]/instructions` list-of-types was widened by adding types `array` to media type `application/json`
  - …2 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/omnistack-sh/apis/openai-api/changes/live/sessions/post.md)

---

[API](https://skmtc.dev/omnistack-sh/apis/openai-api.md) - [All operations](https://skmtc.dev/omnistack-sh/apis/openai-api/llms.txt) - [OpenAPI document](https://skmtc.dev/omnistack-sh/apis/openai-api/revisions/0a26f104d35f?raw)
