{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/openai/main/json-schema/openai-live-create-request-schema.json",
  "title": "LiveCreateRequest",
  "description": "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.",
  "x-generated": "2026-09-23",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/openai-live-api-openapi.yml#/components/schemas/LiveCreateRequest",
  "type": "object",
  "properties": {
    "session": {
      "$ref": "#/$defs/LiveMediaSessionCreateParams",
      "description": "Startup configuration for the Live session."
    },
    "transport": {
      "$ref": "#/$defs/LiveWebRTCTransport",
      "description": "WebRTC transport with the browser's SDP offer."
    }
  },
  "required": [
    "session",
    "transport"
  ],
  "additionalProperties": false,
  "$defs": {
    "LiveAllowedServerEventParam": {
      "description": "A Live server event selector for the WebRTC frontend data channel.",
      "type": "object",
      "properties": {
        "type": {
          "description": "The outer Live server event type. Use 'response.event' for Responses events.",
          "type": "string",
          "minLength": 1,
          "maxLength": 256
        },
        "response_event": {
          "description": "The nested Responses event type. Required when type is 'response.event'; forbidden for other event types.",
          "type": "string",
          "minLength": 1,
          "maxLength": 256
        }
      },
      "required": [
        "type"
      ],
      "additionalProperties": false,
      "x-oaiMeta": {}
    },
    "LiveClientConfigParam": {
      "description": "Startup-only capabilities for an untrusted frontend attached to a unified WebRTC session. Trusted sideband connections are unaffected.",
      "type": "object",
      "properties": {
        "data_channel": {
          "description": "Client and server event permissions for the WebRTC frontend data channel.",
          "$ref": "#/$defs/LiveDataChannelConfigParam"
        }
      },
      "required": [
        "data_channel"
      ]
    },
    "LiveClientDelegationParam": {
      "description": "Delegate tasks to your application. The Live session emits delegation events that your backend handles.",
      "type": "object",
      "properties": {
        "type": {
          "description": "The delegation owner. Always `client` for tasks handled by your application.",
          "default": "client",
          "x-stainless-const": true,
          "type": "string",
          "enum": [
            "client"
          ]
        }
      },
      "required": [
        "type"
      ]
    },
    "LiveCustomVoiceParam": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 128
        }
      },
      "required": [
        "id"
      ]
    },
    "LiveDataChannelConfigParam": {
      "description": "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.",
      "type": "object",
      "properties": {
        "allowed_client_events": {
          "description": "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.",
          "oneOf": [
            {
              "default": "all",
              "x-stainless-const": true,
              "type": "string",
              "enum": [
                "all"
              ]
            },
            {
              "type": "array",
              "items": {
                "description": "A Live client event type allowed on the frontend data channel, such as `session.input_audio.mute`.",
                "type": "string",
                "minLength": 1,
                "maxLength": 256,
                "pattern": "^(?:error|info|[a-z][a-z0-9_-]*(?:\\.[a-z0-9_-]+)+)$"
              },
              "maxItems": 256
            }
          ]
        },
        "allowed_server_events": {
          "description": "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.",
          "oneOf": [
            {
              "default": "all",
              "x-stainless-const": true,
              "type": "string",
              "enum": [
                "all"
              ]
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/LiveAllowedServerEventParam"
              },
              "maxItems": 256
            }
          ]
        }
      },
      "required": []
    },
    "LiveDelegationReasoningInputParam": {
      "description": "Reasoning options for Responses requests made on behalf of the Live session.",
      "type": "object",
      "properties": {
        "effort": {
          "anyOf": [
            {
              "description": "How much reasoning effort the delegated Responses model should use. Supported values depend on the backend model.",
              "$ref": "#/$defs/LiveReasoningEffort"
            },
            {
              "type": "null"
            }
          ]
        },
        "summary": {
          "anyOf": [
            {
              "description": "The reasoning summary to request from the delegated Responses model, when supported.",
              "$ref": "#/$defs/LiveReasoningSummary"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": []
    },
    "LiveDelegationTextInputParam": {
      "description": "Text generation options for the Live session’s Responses backend.",
      "type": "object",
      "properties": {
        "verbosity": {
          "anyOf": [
            {
              "description": "The amount of detail in text generated by the Responses backend. This does not configure the Live model’s spoken delivery.",
              "$ref": "#/$defs/LiveTextVerbosity"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": []
    },
    "LiveFunctionToolChoiceParam": {
      "type": "object",
      "properties": {
        "type": {
          "default": "function",
          "x-stainless-const": true,
          "type": "string",
          "enum": [
            "function"
          ]
        },
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 64,
          "pattern": "^[a-zA-Z0-9_-]+$"
        }
      },
      "required": [
        "type",
        "name"
      ]
    },
    "LiveFunctionToolInputParam": {
      "description": "A function tool available to the Responses backend when the Live model delegates a task.",
      "type": "object",
      "properties": {
        "type": {
          "description": "The tool type. Always `function`.",
          "default": "function",
          "x-stainless-const": true,
          "type": "string",
          "enum": [
            "function"
          ]
        },
        "name": {
          "description": "The name the delegated Responses model uses when calling this function.",
          "type": "string"
        },
        "description": {
          "anyOf": [
            {
              "description": "What the function does and when the delegated Responses model should call it.",
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "parameters": {
          "anyOf": [
            {
              "description": "A JSON Schema object describing the arguments accepted by the function.",
              "type": "object",
              "additionalProperties": {}
            },
            {
              "type": "null"
            }
          ]
        },
        "strict": {
          "anyOf": [
            {
              "description": "Whether the delegated Responses model must follow the function’s parameter schema exactly.",
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "type",
        "name"
      ]
    },
    "LiveInitialAssistantMessageItemParam": {
      "description": "An assistant message included in the initial text history of a Live session.",
      "type": "object",
      "properties": {
        "id": {
          "anyOf": [
            {
              "description": "An optional identifier for the supplied history message. Live uses the message’s role and text to initialize the conversation.",
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "type": {
          "description": "The history item type. Always `message`.",
          "default": "message",
          "x-stainless-const": true,
          "type": "string",
          "enum": [
            "message"
          ]
        },
        "status": {
          "anyOf": [
            {
              "description": "The supplied message’s status. Live uses its text as history and does not resume an incomplete message.",
              "$ref": "#/$defs/LiveInitialMessageStatus"
            },
            {
              "type": "null"
            }
          ]
        },
        "role": {
          "description": "The author of this history message. Always `assistant`.",
          "default": "assistant",
          "x-stainless-const": true,
          "type": "string",
          "enum": [
            "assistant"
          ]
        },
        "content": {
          "description": "The message content. Supply exactly one text part for the initial Live conversation history.",
          "type": "array",
          "items": {
            "oneOf": [
              {
                "$ref": "#/$defs/LiveInitialTextContentPartParam"
              },
              {
                "$ref": "#/$defs/LiveInitialOutputTextContentPartParam"
              }
            ],
            "x-oai-default-discriminator-value": "text"
          },
          "minItems": 1,
          "maxItems": 1
        }
      },
      "required": [
        "role",
        "content"
      ]
    },
    "LiveInitialDeveloperMessageItemParam": {
      "description": "A developer message included in the initial text history of a Live session.",
      "type": "object",
      "properties": {
        "id": {
          "anyOf": [
            {
              "description": "An optional identifier for the supplied history message. Live uses the message’s role and text to initialize the conversation.",
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "type": {
          "description": "The history item type. Always `message`.",
          "default": "message",
          "x-stainless-const": true,
          "type": "string",
          "enum": [
            "message"
          ]
        },
        "status": {
          "anyOf": [
            {
              "description": "The supplied message’s status. Live uses its text as history and does not resume an incomplete message.",
              "$ref": "#/$defs/LiveInitialMessageStatus"
            },
            {
              "type": "null"
            }
          ]
        },
        "role": {
          "description": "The author of this history message. Always `developer`.",
          "default": "developer",
          "x-stainless-const": true,
          "type": "string",
          "enum": [
            "developer"
          ]
        },
        "content": {
          "description": "The message content. Supply exactly one text part for the initial Live conversation history.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/LiveInitialInputTextContentPartParam"
          },
          "minItems": 1,
          "maxItems": 1
        }
      },
      "required": [
        "role",
        "content"
      ]
    },
    "LiveInitialInputTextContentPartParam": {
      "description": "Text supplied in a developer or user message when starting a Live session.",
      "type": "object",
      "properties": {
        "type": {
          "description": "The text content type. Always `input_text`.",
          "default": "input_text",
          "x-stainless-const": true,
          "type": "string",
          "enum": [
            "input_text"
          ]
        },
        "text": {
          "description": "The message text to include in the Live session’s initial conversation history.",
          "type": "string"
        }
      },
      "required": [
        "text"
      ]
    },
    "LiveInitialItem": {
      "description": "A developer, user, or assistant message supplied as text history before the Live session starts.",
      "oneOf": [
        {
          "$ref": "#/$defs/LiveInitialDeveloperMessageItemParam"
        },
        {
          "$ref": "#/$defs/LiveInitialUserMessageItemParam"
        },
        {
          "$ref": "#/$defs/LiveInitialAssistantMessageItemParam"
        }
      ]
    },
    "LiveInitialMessageStatus": {
      "type": "string",
      "enum": [
        "incomplete",
        "completed"
      ]
    },
    "LiveInitialOutputTextContentPartParam": {
      "description": "Assistant output text supplied as conversation history when starting a Live session.",
      "type": "object",
      "properties": {
        "type": {
          "description": "The text content type. Always `output_text`.",
          "default": "output_text",
          "x-stainless-const": true,
          "type": "string",
          "enum": [
            "output_text"
          ]
        },
        "text": {
          "description": "The message text to include in the Live session’s initial conversation history.",
          "type": "string"
        }
      },
      "required": [
        "type",
        "text"
      ]
    },
    "LiveInitialSessionAudioOutputParam": {
      "description": "Settings for speech generated by the Live model. Choose the voice before starting the session.",
      "type": "object",
      "properties": {
        "voice": {
          "description": "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.",
          "oneOf": [
            {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "string",
                  "enum": [
                    "alloy",
                    "ash",
                    "ballad",
                    "beacon",
                    "bossa",
                    "cedar",
                    "cinder",
                    "coral",
                    "delta",
                    "echo",
                    "gleam",
                    "marin",
                    "meridian",
                    "quartz",
                    "ripple",
                    "sage",
                    "shimmer",
                    "stone",
                    "tempo",
                    "verse",
                    "vesper",
                    "willow"
                  ]
                }
              ]
            },
            {
              "$ref": "#/$defs/LiveCustomVoiceParam"
            }
          ]
        }
      },
      "required": []
    },
    "LiveInitialTextContentPartParam": {
      "description": "Assistant text supplied as conversation history when starting a Live session.",
      "type": "object",
      "properties": {
        "type": {
          "description": "The text content type. Always `text`.",
          "default": "text",
          "x-stainless-const": true,
          "type": "string",
          "enum": [
            "text"
          ]
        },
        "text": {
          "description": "The message text to include in the Live session’s initial conversation history.",
          "type": "string"
        }
      },
      "required": [
        "text"
      ]
    },
    "LiveInitialUserMessageItemParam": {
      "description": "A user message included in the initial text history of a Live session.",
      "type": "object",
      "properties": {
        "id": {
          "anyOf": [
            {
              "description": "An optional identifier for the supplied history message. Live uses the message’s role and text to initialize the conversation.",
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "type": {
          "description": "The history item type. Always `message`.",
          "default": "message",
          "x-stainless-const": true,
          "type": "string",
          "enum": [
            "message"
          ]
        },
        "status": {
          "anyOf": [
            {
              "description": "The supplied message’s status. Live uses its text as history and does not resume an incomplete message.",
              "$ref": "#/$defs/LiveInitialMessageStatus"
            },
            {
              "type": "null"
            }
          ]
        },
        "role": {
          "description": "The author of this history message. Always `user`.",
          "default": "user",
          "x-stainless-const": true,
          "type": "string",
          "enum": [
            "user"
          ]
        },
        "content": {
          "description": "The message content. Supply exactly one text part for the initial Live conversation history.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/LiveInitialInputTextContentPartParam"
          },
          "minItems": 1,
          "maxItems": 1
        }
      },
      "required": [
        "role",
        "content"
      ]
    },
    "LiveMCPToolChoiceParam": {
      "type": "object",
      "properties": {
        "type": {
          "default": "mcp",
          "x-stainless-const": true,
          "type": "string",
          "enum": [
            "mcp"
          ]
        },
        "server_label": {
          "type": "string",
          "minLength": 1,
          "maxLength": 64,
          "pattern": "^[a-zA-Z0-9_-]+$"
        },
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 64,
          "pattern": "^[a-zA-Z0-9_-]+$"
        }
      },
      "required": [
        "type",
        "server_label",
        "name"
      ]
    },
    "LiveMediaSessionAudioParam": {
      "type": "object",
      "description": "Startup audio output configuration. WebRTC and SIP negotiate the media format; audio.format is only accepted for primary WebSockets. Voice cannot change after startup.",
      "properties": {
        "output": {
          "$ref": "#/$defs/LiveInitialSessionAudioOutputParam"
        }
      },
      "additionalProperties": false
    },
    "LiveMediaSessionCreateParams": {
      "type": "object",
      "description": "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.",
      "properties": {
        "model": {
          "$ref": "#/$defs/ModelIdsLive"
        },
        "instructions": {
          "$ref": "#/$defs/instructions"
        },
        "audio": {
          "$ref": "#/$defs/LiveMediaSessionAudioParam",
          "description": "Startup audio configuration. WebRTC and SIP negotiate their audio format on the media transport."
        },
        "delegation": {
          "$ref": "#/$defs/delegation"
        },
        "store": {
          "$ref": "#/$defs/store"
        },
        "input": {
          "$ref": "#/$defs/input"
        },
        "client": {
          "$ref": "#/$defs/LiveClientConfigParam"
        }
      },
      "required": [
        "model"
      ],
      "additionalProperties": false
    },
    "LiveReasoningEffort": {
      "type": "string",
      "enum": [
        "none",
        "minimal",
        "low",
        "medium",
        "high",
        "xhigh"
      ]
    },
    "LiveReasoningSummary": {
      "type": "string",
      "enum": [
        "concise",
        "detailed",
        "auto"
      ]
    },
    "LiveResponsesDelegationParam": {
      "description": "Delegate tasks to a Responses model managed by the Live session.",
      "type": "object",
      "properties": {
        "type": {
          "description": "The delegation owner. Always `responses` for tasks handled by the Responses API.",
          "default": "responses",
          "x-stainless-const": true,
          "type": "string",
          "enum": [
            "responses"
          ]
        },
        "responses": {
          "description": "Backend model, prompt, and tools used when the Live session delegates a task to Responses.",
          "$ref": "#/$defs/LiveResponsesDelegationSettingsInputParam"
        }
      },
      "required": [
        "type",
        "responses"
      ]
    },
    "LiveResponsesDelegationSettingsInputParam": {
      "description": "Model, prompt, and tool settings for tasks delegated by the Live session to a Responses backend.",
      "type": "object",
      "properties": {
        "model": {
          "description": "The model used for server-owned Responses delegations.",
          "type": "string"
        },
        "instructions": {
          "anyOf": [
            {
              "description": "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).",
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "max_output_tokens": {
          "anyOf": [
            {
              "description": "Maximum number of output tokens for each delegated response.",
              "type": "integer",
              "minimum": 16
            },
            {
              "type": "null"
            }
          ]
        },
        "service_tier": {
          "anyOf": [
            {
              "description": "Service tier for delegated Responses requests.",
              "$ref": "#/$defs/LiveResponsesServiceTier"
            },
            {
              "type": "null"
            }
          ]
        },
        "reasoning": {
          "anyOf": [
            {
              "description": "Reasoning settings passed to each delegated Responses request.",
              "$ref": "#/$defs/LiveDelegationReasoningInputParam"
            },
            {
              "type": "null"
            }
          ]
        },
        "text": {
          "anyOf": [
            {
              "description": "Text generation settings passed to each delegated Responses request.",
              "$ref": "#/$defs/LiveDelegationTextInputParam"
            },
            {
              "type": "null"
            }
          ]
        },
        "tools": {
          "description": "Tools available to the Responses backend while it handles tasks delegated by the Live model.",
          "type": "array",
          "items": {
            "oneOf": [
              {
                "$ref": "#/$defs/LiveFunctionToolInputParam"
              },
              {
                "$ref": "#/$defs/LiveWebSearchToolInputParam"
              }
            ]
          }
        },
        "tool_choice": {
          "description": "Controls which tool the Responses backend uses when handling a task delegated by the Live model.",
          "oneOf": [
            {
              "$ref": "#/$defs/LiveToolChoiceEnum"
            },
            {
              "$ref": "#/$defs/LiveFunctionToolChoiceParam"
            },
            {
              "$ref": "#/$defs/LiveMCPToolChoiceParam"
            }
          ]
        },
        "parallel_tool_calls": {
          "anyOf": [
            {
              "description": "Whether the delegated Responses model may request multiple tool calls in a single response.",
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "model"
      ]
    },
    "LiveResponsesServiceTier": {
      "type": "string",
      "enum": [
        "auto",
        "default",
        "fast_tier_temp_pilot",
        "flex",
        "priority",
        "ultrafast"
      ]
    },
    "LiveTextVerbosity": {
      "type": "string",
      "enum": [
        "low",
        "medium",
        "high"
      ]
    },
    "LiveToolChoiceEnum": {
      "type": "string",
      "enum": [
        "auto",
        "none",
        "required"
      ]
    },
    "LiveWebRTCTransport": {
      "type": "object",
      "description": "WebRTC transport carrying the offer SDP in a creation request or answer SDP in its response.",
      "properties": {
        "type": {
          "type": "string",
          "description": "The transport used for the Live session. Always `webrtc`.",
          "enum": [
            "webrtc"
          ],
          "x-stainless-const": true
        },
        "sdp": {
          "type": "string",
          "minLength": 1,
          "description": "Session Description Protocol message for the WebRTC connection."
        }
      },
      "required": [
        "type",
        "sdp"
      ],
      "additionalProperties": false
    },
    "LiveWebSearchToolInputParam": {
      "description": "A web search tool available to the Live session’s Responses backend.",
      "type": "object",
      "properties": {
        "type": {
          "description": "The tool type. Always `web_search`.",
          "default": "web_search",
          "x-stainless-const": true,
          "type": "string",
          "enum": [
            "web_search"
          ]
        }
      },
      "required": [
        "type"
      ]
    },
    "ModelIdsLive": {
      "description": "The Live model. Required in the session configuration for every transport; do not pass it as a URL query parameter.",
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "string",
          "enum": [
            "gpt-live-1"
          ]
        }
      ]
    },
    "delegation": {
      "anyOf": [
        {
          "description": "Who handles tasks delegated by the Live model. Omitted or null selects your application; use `responses` to let the API manage a Responses backend.",
          "oneOf": [
            {
              "$ref": "#/$defs/LiveClientDelegationParam"
            },
            {
              "$ref": "#/$defs/LiveResponsesDelegationParam"
            }
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "input": {
      "description": "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.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/LiveInitialItem"
      },
      "maxItems": 128
    },
    "instructions": {
      "anyOf": [
        {
          "description": "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.",
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "store": {
      "description": "Whether to store the session for later forking and recording download. Defaults to false for new sessions.",
      "type": "boolean"
    }
  }
}