WebSocket
Realtime API (WebSocket)
wss://api.inworld.ai/api/v1/realtime/sessionUse a persistent WebSocket connection for low-latency speech-to-speech conversations through an STT → LLM → TTS pipeline, with audio and text input and output.
Clients can:
- Create and configure sessions with custom instructions and voice settings.
- Stream audio input for live voice conversations, or send text input.
- Receive streaming audio and text response events as they are generated.
- Use automatic speech detection with configurable thresholds.
- Control conversation flow with turn detection and response controls.
- Keep conversation context across multiple interactions.
Rate limits: Concurrent session limits vary by subscription plan. See features and limits by plan for the table.
Inworld extensions: The session object accepts providerData for STT tuning, TTS segmentation and steering, automatic memory, back-channel responses, and responsiveness fillers. These extend the OpenAI-compatible session format. See API Extensions for each field.
This API implements the Realtime interface. See the Realtime overview for hands-on guides.
Client messages
session.update
Update the session configuration. The server responds with a session.updated event.
Payload
The session object configures model behavior, audio settings, tools, and more. It appears in session.update, session.created, and session.updated events.
Show child attributes
Maximum tokens for a response. Either an integer (1–4096) or the literal string "inf".
Show child attributes
Show child attributes
Audio wire format for client input or server output. Used on both audio.input.format and audio.output.format. Accepts either an object form (with type + optional rate) or a legacy string alias.
Show child attributes
Show child attributes
Audio wire format for client input or server output. Used on both audio.input.format and audio.output.format. Accepts either an object form (with type + optional rate) or a legacy string alias.
Voice preset for audio output (e.g., Dennis). See the List Voices API or the Voice library page in the Inworld Portal for the full list of supported voices.
Tool selection. Either a shorthand string (none, auto, required) or a ToolChoiceTarget object that names a specific function or MCP server.
Conversation truncation strategy. Either a shorthand string (auto, disabled) or a RetentionRatioTruncation object that pins a fraction of the context window.
Tracing configuration. Either the literal "auto" (server defaults) or a TracingConfig object with explicit workflow / group / metadata.
Inworld-specific extensions to the OpenAI-compatible session shape. Most fields are hot-swappable via partial session.update. See Inworld Realtime API Extensions for the field-by-field reference.
Show child attributes
STT extensions: voice_profile, end_of_turn_confidence_threshold, vad_threshold, min_end_of_turn_silence, max_turn_silence. See STT provider data.
TTS segmentation, language, delivery, and alignment controls: segmenter_strategy, steering_handling, language, delivery_mode, conversational, user_turn_mode, timestamp_type, timestamp_transport_strategy. See TTS provider data.
Automatic conversation memory and summarization: enabled, turn_interval, max_memory_length, max_transcript_items, max_facts, trim_after_summarize. See Memory provider data.
Opt-in back-channel responses (brief acknowledgements while the user is speaking). See Back-channel.
Opt-in responsiveness fillers (low-latency acknowledgements emitted before the main response). See Responsiveness.
Fine-grained LLM generation parameters. Also accepted under providerData.text_generation_config.
Show child attributes
Chain-of-thought reasoning control. Forwarded to the LLM Router as extra_body.reasoning.
Example
{
"type": "session.update",
"session": {
"instructions": "You are a friendly voice assistant.",
"audio": {
"input": {
"transcription": {
"model": "inworld/inworld-stt-1"
},
"turn_detection": {
"type": "semantic_vad",
"eagerness": "medium",
"create_response": true,
"interrupt_response": true
}
},
"output": {
"model": "inworld-tts-2",
"voice": "Dennis",
"speed": 1
}
}
}
}conversation.item.create
Add a conversation item (message, tool call, or tool result).
Payload
Controls insertion. Omit to append, use "root" to prepend, or provide an existing item ID to insert immediately after it. An unknown ID returns itemnotfound with error.param set to previousitemid and does not mutate history.
Client-created conversation item. functioncall requires a non-empty name; functioncalloutput requires a non-empty callid. arguments and output may be omitted and normalize to empty strings.
Show child attributes
Item status (read-only, present in server responses).
Available options:completedin_progressincomplete
Show child attributes
Content type. User input uses inputtext/inputaudio/inputimage. Assistant item snapshots use outputtext/outputaudio. Streaming response.contentpart events use text/audio. Legacy text/audio aliases are accepted when creating assistant items.
Available options:input_textinput_audioinput_imagetextaudiooutput_textoutput_audio
Tool-call identifier. Required and non-empty for client-created functioncalloutput; optional for functioncall. Always present on server functioncall_output snapshots, including as an empty string.
Function name. Required and non-empty for client-created functioncall; always present on server functioncall snapshots, including as an empty string.
Function arguments as a JSON string. May be omitted on input and then normalizes to an empty string; always present on server function_call snapshots.
Function result. May be omitted on input and then normalizes to an empty string; always present on server functioncalloutput snapshots.
Example
{
"type": "conversation.item.create",
"item": {
"type": "message",
"role": "user",
"content": [
{
"type": "input_text",
"text": "Hello, how are you?"
}
]
}
}conversation.item.truncate
Truncate an assistant message's audio.
Payload
Example
{
"event_id": "string",
"item_id": "string",
"content_index": 0,
"audio_end_ms": 0
}conversation.item.delete
conversation.item.retrieve
response.create
Trigger a model response. The server streams back response events.
Payload
Per-response overrides for session defaults.
Show child attributes
Conversation selector. Either the literal "auto" (use the session's implicit conversation) or an explicit conversation ID string.
Maximum tokens for a response. Either an integer (1–4096) or the literal string "inf".
Tool selection. Either a shorthand string (none, auto, required) or a ToolChoiceTarget object that names a specific function or MCP server.
Override available tools.
Example
{
"type": "response.create",
"response": {
"output_modalities": [
"audio",
"text"
],
"instructions": "Respond in a cheerful tone."
}
}response.cancel
response.speak
Inworld extension. Speak the supplied text verbatim as the next assistant response, without calling the LLM. The server acknowledges the request with response.speak.acknowledged, then streams the normal response events. Audio sessions synthesize the text with the session's TTS configuration; text-only sessions receive it as a single text delta.
Payload
Optional client-generated event ID. Echoed as request_event_id on response.speak.acknowledged. It is not an idempotency key: repeated requests are spoken again.
Text to speak, verbatim. Sent to TTS unchanged, with no LLM rewriting. Required and must be a string; an empty string is accepted. There is no feature-specific length limit. A non-string value fails decoding: the server returns an error event with code invalid_json instead of an acknowledgment.
force_uninterruptiblebooleandefault: false
When true, speech detection and new user messages do not cancel this response, and automatically triggered responses (turn detection, tool continuation) are rejected with conversation_already_has_active_response while it is generating. Explicit response.cancel, response.create, and response.speak still cancel or replace it. Protection ends when generation ends, not when the client finishes playback. When false or omitted, the response is interrupted like any other.
Example
{
"type": "response.speak",
"event_id": "evt_greeting_1",
"text": "Hi! Thanks for calling. How can I help you today?",
"force_uninterruptible": true,
"metadata": {
"purpose": "greeting"
}
}input_audio_buffer.append
input_audio_buffer.commit
input_audio_buffer.clear
Server messages
session.created
Sent by the server immediately when the WebSocket connection is established, carrying the session's default configuration. Send a session.update to configure the session.
Payload
The session object configures model behavior, audio settings, tools, and more. It appears in session.update, session.created, and session.updated events.
Show child attributes
Maximum tokens for a response. Either an integer (1–4096) or the literal string "inf".
Show child attributes
Show child attributes
Audio wire format for client input or server output. Used on both audio.input.format and audio.output.format. Accepts either an object form (with type + optional rate) or a legacy string alias.
Show child attributes
Show child attributes
Audio wire format for client input or server output. Used on both audio.input.format and audio.output.format. Accepts either an object form (with type + optional rate) or a legacy string alias.
Voice preset for audio output (e.g., Dennis). See the List Voices API or the Voice library page in the Inworld Portal for the full list of supported voices.
Tool selection. Either a shorthand string (none, auto, required) or a ToolChoiceTarget object that names a specific function or MCP server.
Conversation truncation strategy. Either a shorthand string (auto, disabled) or a RetentionRatioTruncation object that pins a fraction of the context window.
Tracing configuration. Either the literal "auto" (server defaults) or a TracingConfig object with explicit workflow / group / metadata.
Inworld-specific extensions to the OpenAI-compatible session shape. Most fields are hot-swappable via partial session.update. See Inworld Realtime API Extensions for the field-by-field reference.
Show child attributes
STT extensions: voice_profile, end_of_turn_confidence_threshold, vad_threshold, min_end_of_turn_silence, max_turn_silence. See STT provider data.
TTS segmentation, language, delivery, and alignment controls: segmenter_strategy, steering_handling, language, delivery_mode, conversational, user_turn_mode, timestamp_type, timestamp_transport_strategy. See TTS provider data.
Automatic conversation memory and summarization: enabled, turn_interval, max_memory_length, max_transcript_items, max_facts, trim_after_summarize. See Memory provider data.
Opt-in back-channel responses (brief acknowledgements while the user is speaking). See Back-channel.
Opt-in responsiveness fillers (low-latency acknowledgements emitted before the main response). See Responsiveness.
Fine-grained LLM generation parameters. Also accepted under providerData.text_generation_config.
Show child attributes
Chain-of-thought reasoning control. Forwarded to the LLM Router as extra_body.reasoning.
Example
{
"event_id": "string",
"session": {
"object": "string",
"type": "string",
"id": "string",
"model": "string",
"instructions": "string",
"output_modalities": [
"text"
],
"temperature": 0,
"max_output_tokens": 0,
"audio": {
"input": {
"format": {
"type": "audio/pcm",
"rate": 0
},
"noise_reduction": {
"type": "near_field"
},
"transcription": {
"model": "string",
"language": "string",
"prompt": "string",
"prompts": [
"string"
]
},
"turn_detection": {
"threshold": 0,
"prefix_padding_ms": 0,
"silence_duration_ms": 0,
"create_response": true,
"interrupt_response": true,
"idle_timeout_ms": 0
}
},
"output": {
"format": {
"type": "audio/pcm",
"rate": 0
},
"voice": "string",
"model": "string",
"speed": 0
}
},
"tools": [
{
"type": "string",
"name": "string",
"description": "string"
}
],
"tool_choice": "none",
"truncation": "auto",
"tracing": "string",
"include": [
"item.input_audio_transcription.logprobs"
],
"providerData": {
"auto_tool_response": true
},
"text_generation_config": {
"reasoning": {
"effort": "NONE",
"maxTokens": 0,
"exclude": true
},
"temperature": 0,
"topP": 0,
"maxNewTokens": 0,
"frequencyPenalty": 0,
"presencePenalty": 0
},
"expires_at": 0
}
}session.updated
Confirms a session.update was applied.
Payload
The session object configures model behavior, audio settings, tools, and more. It appears in session.update, session.created, and session.updated events.
Show child attributes
Maximum tokens for a response. Either an integer (1–4096) or the literal string "inf".
Show child attributes
Show child attributes
Audio wire format for client input or server output. Used on both audio.input.format and audio.output.format. Accepts either an object form (with type + optional rate) or a legacy string alias.
Show child attributes
Show child attributes
Audio wire format for client input or server output. Used on both audio.input.format and audio.output.format. Accepts either an object form (with type + optional rate) or a legacy string alias.
Voice preset for audio output (e.g., Dennis). See the List Voices API or the Voice library page in the Inworld Portal for the full list of supported voices.
Tool selection. Either a shorthand string (none, auto, required) or a ToolChoiceTarget object that names a specific function or MCP server.
Conversation truncation strategy. Either a shorthand string (auto, disabled) or a RetentionRatioTruncation object that pins a fraction of the context window.
Tracing configuration. Either the literal "auto" (server defaults) or a TracingConfig object with explicit workflow / group / metadata.
Inworld-specific extensions to the OpenAI-compatible session shape. Most fields are hot-swappable via partial session.update. See Inworld Realtime API Extensions for the field-by-field reference.
Show child attributes
STT extensions: voice_profile, end_of_turn_confidence_threshold, vad_threshold, min_end_of_turn_silence, max_turn_silence. See STT provider data.
TTS segmentation, language, delivery, and alignment controls: segmenter_strategy, steering_handling, language, delivery_mode, conversational, user_turn_mode, timestamp_type, timestamp_transport_strategy. See TTS provider data.
Automatic conversation memory and summarization: enabled, turn_interval, max_memory_length, max_transcript_items, max_facts, trim_after_summarize. See Memory provider data.
Opt-in back-channel responses (brief acknowledgements while the user is speaking). See Back-channel.
Opt-in responsiveness fillers (low-latency acknowledgements emitted before the main response). See Responsiveness.
Fine-grained LLM generation parameters. Also accepted under providerData.text_generation_config.
Show child attributes
Chain-of-thought reasoning control. Forwarded to the LLM Router as extra_body.reasoning.
Example
{
"event_id": "string",
"session": {
"object": "string",
"type": "string",
"id": "string",
"model": "string",
"instructions": "string",
"output_modalities": [
"text"
],
"temperature": 0,
"max_output_tokens": 0,
"audio": {
"input": {
"format": {
"type": "audio/pcm",
"rate": 0
},
"noise_reduction": {
"type": "near_field"
},
"transcription": {
"model": "string",
"language": "string",
"prompt": "string",
"prompts": [
"string"
]
},
"turn_detection": {
"threshold": 0,
"prefix_padding_ms": 0,
"silence_duration_ms": 0,
"create_response": true,
"interrupt_response": true,
"idle_timeout_ms": 0
}
},
"output": {
"format": {
"type": "audio/pcm",
"rate": 0
},
"voice": "string",
"model": "string",
"speed": 0
}
},
"tools": [
{
"type": "string",
"name": "string",
"description": "string"
}
],
"tool_choice": "none",
"truncation": "auto",
"tracing": "string",
"include": [
"item.input_audio_transcription.logprobs"
],
"providerData": {
"auto_tool_response": true
},
"text_generation_config": {
"reasoning": {
"effort": "NONE",
"maxTokens": 0,
"exclude": true
},
"temperature": 0,
"topP": 0,
"maxNewTokens": 0,
"frequencyPenalty": 0,
"presencePenalty": 0
},
"expires_at": 0
}
}error
Indicates an error occurred.
Payload
Example
{
"event_id": "2c23cfd4-a4b5-4a96-83b8-a6a151f3989e",
"type": "error",
"error": {
"type": "server_error",
"code": null,
"message": "Failed to read content stream.",
"param": null,
"event_id": null
}
}conversation.item.added
A new item was added to the conversation.
Payload
Server conversation item snapshot. Variant-specific function fields are always serialized, including as empty strings.
Show child attributes
Item status (read-only, present in server responses).
Available options:completedin_progressincomplete
Show child attributes
Content type. User input uses inputtext/inputaudio/inputimage. Assistant item snapshots use outputtext/outputaudio. Streaming response.contentpart events use text/audio. Legacy text/audio aliases are accepted when creating assistant items.
Available options:input_textinput_audioinput_imagetextaudiooutput_textoutput_audio
Tool-call identifier. Required and non-empty for client-created functioncalloutput; optional for functioncall. Always present on server functioncall_output snapshots, including as an empty string.
Function name. Required and non-empty for client-created functioncall; always present on server functioncall snapshots, including as an empty string.
Function arguments as a JSON string. May be omitted on input and then normalizes to an empty string; always present on server function_call snapshots.
Function result. May be omitted on input and then normalizes to an empty string; always present on server functioncalloutput snapshots.
Example
{
"event_id": "string",
"item": {
"object": "string",
"id": "string",
"type": "message",
"status": "completed",
"role": "system",
"content": [
{
"type": "input_text",
"text": "string",
"audio": "string",
"transcript": "string",
"image": "string",
"image_url": "string",
"detail": "low"
}
],
"call_id": "string",
"name": "string",
"arguments": "string",
"output": "string",
"force_uninterruptible": true
}
}conversation.item.done
An item finished being populated.
Payload
Server conversation item snapshot. Variant-specific function fields are always serialized, including as empty strings.
Show child attributes
Item status (read-only, present in server responses).
Available options:completedin_progressincomplete
Show child attributes
Content type. User input uses inputtext/inputaudio/inputimage. Assistant item snapshots use outputtext/outputaudio. Streaming response.contentpart events use text/audio. Legacy text/audio aliases are accepted when creating assistant items.
Available options:input_textinput_audioinput_imagetextaudiooutput_textoutput_audio
Tool-call identifier. Required and non-empty for client-created functioncalloutput; optional for functioncall. Always present on server functioncall_output snapshots, including as an empty string.
Function name. Required and non-empty for client-created functioncall; always present on server functioncall snapshots, including as an empty string.
Function arguments as a JSON string. May be omitted on input and then normalizes to an empty string; always present on server function_call snapshots.
Function result. May be omitted on input and then normalizes to an empty string; always present on server functioncalloutput snapshots.
Example
{
"event_id": "string",
"item": {
"object": "string",
"id": "string",
"type": "message",
"status": "completed",
"role": "system",
"content": [
{
"type": "input_text",
"text": "string",
"audio": "string",
"transcript": "string",
"image": "string",
"image_url": "string",
"detail": "low"
}
],
"call_id": "string",
"name": "string",
"arguments": "string",
"output": "string",
"force_uninterruptible": true
}
}conversation.item.deleted
conversation.item.retrieved
conversation.item.truncated
conversation.item.input_audio_transcription.delta
Streaming partial transcription for user audio.
Payload
Example
{
"event_id": "string",
"item_id": "string",
"content_index": 0,
"delta": "string"
}conversation.item.input_audio_transcription.completed
Final transcription for a user audio item.
Payload
Example
{
"event_id": "string",
"item_id": "string",
"content_index": 0,
"transcript": "string"
}response.speak.acknowledged
Inworld extension. Reports whether a response.speak request was accepted. Sent once per decoded request, before response.created for that response. Acceptance means the request was admitted, not that synthesis or playback succeeded; later failures arrive through the normal error and response.done events.
Payload
The event_id of the response.speak request. Omitted when the request had no event_id.
true when the request was admitted and a response was started; false when it was rejected. A rejected request creates no response or conversation item and does not cancel the active response.
Why the request was rejected. Present only when accepted is false.
Show child attributes
Example
{
"type": "response.speak.acknowledged",
"event_id": "evt_server_1",
"request_event_id": "evt_greeting_1",
"accepted": true,
"response_id": "resp_1",
"metadata": {
"purpose": "greeting"
}
}response.created
A new response was created. Contains the full response object in its initial state.
Payload
The response object returned in response.created and response.done events.
Show child attributes
Output items.
Show child attributes
Item status (read-only, present in server responses).
Available options:completedin_progressincomplete
Show child attributes
Content type. User input uses inputtext/inputaudio/inputimage. Assistant item snapshots use outputtext/outputaudio. Streaming response.contentpart events use text/audio. Legacy text/audio aliases are accepted when creating assistant items.
Available options:input_textinput_audioinput_imagetextaudiooutput_textoutput_audio
Tool-call identifier. Required and non-empty for client-created functioncalloutput; optional for functioncall. Always present on server functioncall_output snapshots, including as an empty string.
Function name. Required and non-empty for client-created functioncall; always present on server functioncall snapshots, including as an empty string.
Function arguments as a JSON string. May be omitted on input and then normalizes to an empty string; always present on server function_call snapshots.
Function result. May be omitted on input and then normalizes to an empty string; always present on server functioncalloutput snapshots.
Maximum tokens for a response. Either an integer (1–4096) or the literal string "inf".
Token + audio usage for the response. The base block (total_tokens, input_tokens, output_tokens, input_token_details, output_token_details) covers LLM token accounting. The optional llm, tts, and stt sub-objects attribute usage per modality to the upstream model/provider and add tts.audio_seconds/stt.audio_seconds for audio billing. Each modality sub-object is omitted when its data is unavailable (e.g. a response with no TTS output, or a TTS-only response with no STT turn).
Show child attributes
Show child attributes
Input tokens served from a prompt cache hit. Populated by both implicit provider caching and explicit caching via providerData.caching.
Input tokens written to the cache when establishing a new entry (explicit caching on supporting providers, e.g. Anthropic). Omitted on cache hits.
Attribution for the LLM portion of this response.
TTS usage accumulated across all segments of this response.
STT usage for the user audio that fed this response. Drained per response.done from a rolling per-session counter, so each response sees only the audio transcribed since the previous response.done.
Example
{
"event_id": "string",
"response": {
"id": "string",
"object": "string",
"status": "in_progress",
"status_details": {
"type": "completed",
"reason": "string",
"error": {
"type": "string",
"code": "string"
}
},
"output": [
{
"object": "string",
"id": "string",
"type": "message",
"status": "completed",
"role": "system",
"content": [
{
"type": "input_text",
"text": "string",
"audio": "string",
"transcript": "string",
"image": "string",
"image_url": "string",
"detail": "low"
}
],
"call_id": "string",
"name": "string",
"arguments": "string",
"output": "string",
"force_uninterruptible": true
}
],
"conversation_id": "string",
"output_modalities": [
"string"
],
"max_output_tokens": 0,
"usage": {
"total_tokens": 0,
"input_tokens": 0,
"output_tokens": 0,
"input_token_details": {
"cached_tokens": 0,
"cache_write_tokens": 0,
"text_tokens": 0,
"audio_tokens": 0
},
"output_token_details": {
"text_tokens": 0,
"audio_tokens": 0,
"reasoning_tokens": 0
},
"llm": {
"model": "string"
},
"tts": {
"model": "string",
"characters": 0,
"audio_seconds": 0
},
"stt": {
"model": "string",
"audio_seconds": 0
}
}
}
}response.done
The response finished. Contains the completed response object with final status and output.
Payload
The response object returned in response.created and response.done events.
Show child attributes
Output items.
Show child attributes
Item status (read-only, present in server responses).
Available options:completedin_progressincomplete
Show child attributes
Content type. User input uses inputtext/inputaudio/inputimage. Assistant item snapshots use outputtext/outputaudio. Streaming response.contentpart events use text/audio. Legacy text/audio aliases are accepted when creating assistant items.
Available options:input_textinput_audioinput_imagetextaudiooutput_textoutput_audio
Tool-call identifier. Required and non-empty for client-created functioncalloutput; optional for functioncall. Always present on server functioncall_output snapshots, including as an empty string.
Function name. Required and non-empty for client-created functioncall; always present on server functioncall snapshots, including as an empty string.
Function arguments as a JSON string. May be omitted on input and then normalizes to an empty string; always present on server function_call snapshots.
Function result. May be omitted on input and then normalizes to an empty string; always present on server functioncalloutput snapshots.
Maximum tokens for a response. Either an integer (1–4096) or the literal string "inf".
Token + audio usage for the response. The base block (total_tokens, input_tokens, output_tokens, input_token_details, output_token_details) covers LLM token accounting. The optional llm, tts, and stt sub-objects attribute usage per modality to the upstream model/provider and add tts.audio_seconds/stt.audio_seconds for audio billing. Each modality sub-object is omitted when its data is unavailable (e.g. a response with no TTS output, or a TTS-only response with no STT turn).
Show child attributes
Show child attributes
Input tokens served from a prompt cache hit. Populated by both implicit provider caching and explicit caching via providerData.caching.
Input tokens written to the cache when establishing a new entry (explicit caching on supporting providers, e.g. Anthropic). Omitted on cache hits.
Attribution for the LLM portion of this response.
TTS usage accumulated across all segments of this response.
STT usage for the user audio that fed this response. Drained per response.done from a rolling per-session counter, so each response sees only the audio transcribed since the previous response.done.
Example
{
"event_id": "string",
"response": {
"id": "string",
"object": "string",
"status": "in_progress",
"status_details": {
"type": "completed",
"reason": "string",
"error": {
"type": "string",
"code": "string"
}
},
"output": [
{
"object": "string",
"id": "string",
"type": "message",
"status": "completed",
"role": "system",
"content": [
{
"type": "input_text",
"text": "string",
"audio": "string",
"transcript": "string",
"image": "string",
"image_url": "string",
"detail": "low"
}
],
"call_id": "string",
"name": "string",
"arguments": "string",
"output": "string",
"force_uninterruptible": true
}
],
"conversation_id": "string",
"output_modalities": [
"string"
],
"max_output_tokens": 0,
"usage": {
"total_tokens": 0,
"input_tokens": 0,
"output_tokens": 0,
"input_token_details": {
"cached_tokens": 0,
"cache_write_tokens": 0,
"text_tokens": 0,
"audio_tokens": 0
},
"output_token_details": {
"text_tokens": 0,
"audio_tokens": 0,
"reasoning_tokens": 0
},
"llm": {
"model": "string"
},
"tts": {
"model": "string",
"characters": 0,
"audio_seconds": 0
},
"stt": {
"model": "string",
"audio_seconds": 0
}
}
}
}response.output_item.added
An output item was added to the response.
Payload
Server conversation item snapshot. Variant-specific function fields are always serialized, including as empty strings.
Show child attributes
Item status (read-only, present in server responses).
Available options:completedin_progressincomplete
Show child attributes
Content type. User input uses inputtext/inputaudio/inputimage. Assistant item snapshots use outputtext/outputaudio. Streaming response.contentpart events use text/audio. Legacy text/audio aliases are accepted when creating assistant items.
Available options:input_textinput_audioinput_imagetextaudiooutput_textoutput_audio
Tool-call identifier. Required and non-empty for client-created functioncalloutput; optional for functioncall. Always present on server functioncall_output snapshots, including as an empty string.
Function name. Required and non-empty for client-created functioncall; always present on server functioncall snapshots, including as an empty string.
Function arguments as a JSON string. May be omitted on input and then normalizes to an empty string; always present on server function_call snapshots.
Function result. May be omitted on input and then normalizes to an empty string; always present on server functioncalloutput snapshots.
Example
{
"event_id": "string",
"response_id": "string",
"output_index": 0,
"item": {
"object": "string",
"id": "string",
"type": "message",
"status": "completed",
"role": "system",
"content": [
{
"type": "input_text",
"text": "string",
"audio": "string",
"transcript": "string",
"image": "string",
"image_url": "string",
"detail": "low"
}
],
"call_id": "string",
"name": "string",
"arguments": "string",
"output": "string",
"force_uninterruptible": true
}
}response.output_item.done
An output item finished.
Payload
Server conversation item snapshot. Variant-specific function fields are always serialized, including as empty strings.
Show child attributes
Item status (read-only, present in server responses).
Available options:completedin_progressincomplete
Show child attributes
Content type. User input uses inputtext/inputaudio/inputimage. Assistant item snapshots use outputtext/outputaudio. Streaming response.contentpart events use text/audio. Legacy text/audio aliases are accepted when creating assistant items.
Available options:input_textinput_audioinput_imagetextaudiooutput_textoutput_audio
Tool-call identifier. Required and non-empty for client-created functioncalloutput; optional for functioncall. Always present on server functioncall_output snapshots, including as an empty string.
Function name. Required and non-empty for client-created functioncall; always present on server functioncall snapshots, including as an empty string.
Function arguments as a JSON string. May be omitted on input and then normalizes to an empty string; always present on server function_call snapshots.
Function result. May be omitted on input and then normalizes to an empty string; always present on server functioncalloutput snapshots.
Example
{
"event_id": "string",
"response_id": "string",
"output_index": 0,
"item": {
"object": "string",
"id": "string",
"type": "message",
"status": "completed",
"role": "system",
"content": [
{
"type": "input_text",
"text": "string",
"audio": "string",
"transcript": "string",
"image": "string",
"image_url": "string",
"detail": "low"
}
],
"call_id": "string",
"name": "string",
"arguments": "string",
"output": "string",
"force_uninterruptible": true
}
}response.content_part.added
A content part was added to an output item.
Payload
Example
{
"event_id": "string",
"response_id": "string",
"item_id": "string",
"output_index": 0,
"content_index": 0
}response.content_part.done
A content part finished.
Payload
Example
{
"event_id": "string",
"response_id": "string",
"item_id": "string",
"output_index": 0,
"content_index": 0
}response.output_text.delta
Streaming text chunk from the model.
Payload
Example
{
"event_id": "string",
"response_id": "string",
"item_id": "string",
"output_index": 0,
"content_index": 0,
"delta": "string"
}response.output_text.done
Text output finished.
Payload
Example
{
"event_id": "string",
"response_id": "string",
"item_id": "string",
"output_index": 0,
"content_index": 0,
"text": "string"
}response.output_audio_transcript.delta
Streaming transcript for generated audio.
Payload
Example
{
"event_id": "string",
"response_id": "string",
"item_id": "string",
"output_index": 0,
"content_index": 0,
"delta": "string"
}response.output_audio_transcript.done
Final transcript for generated audio.
Payload
Example
{
"event_id": "string",
"response_id": "string",
"item_id": "string",
"output_index": 0,
"content_index": 0,
"transcript": "string"
}response.output_audio.done
Audio output for a content part finished.
Payload
Example
{
"event_id": "string",
"response_id": "string",
"item_id": "string",
"output_index": 0,
"content_index": 0
}response.function_call_arguments.delta
Streaming tool call arguments.
Payload
Example
{
"event_id": "string",
"response_id": "string",
"item_id": "string",
"output_index": 0,
"call_id": "string",
"delta": "string"
}response.function_call_arguments.done
Tool call arguments finished.
Payload
Example
{
"event_id": "string",
"response_id": "string",
"item_id": "string",
"output_index": 0,
"call_id": "string",
"name": "string",
"arguments": "string"
}input_audio_buffer.speech_started
Voice activity detected — user started speaking. Always emitted before transcripts, including on STT providers without native VAD (the server synthesizes the event at first-audio so client code can rely on the same ordering across providers).
Payload
Example
{
"event_id": "string",
"audio_start_ms": 0,
"item_id": "string"
}input_audio_buffer.speech_stopped
Voice activity ended — user stopped speaking.
Payload
Example
{
"event_id": "string",
"audio_end_ms": 0,
"item_id": "string"
}input_audio_buffer.committed
Buffered audio was committed as a conversation item.
Payload
Example
{
"event_id": "string",
"item_id": "string"
}input_audio_buffer.cleared
input_audio_buffer.timeout_triggered
An idle timeout was triggered on the input buffer. Emitted under servervad when no speech has been detected within `turndetection.idletimeoutms`.
Payload
Example
{
"event_id": "string",
"audio_start_ms": 0,
"audio_end_ms": 0,
"item_id": "string"
}input_audio_buffer.turn_suggestion
Emitted by the server VAD smart-turn detector when it predicts the user has reached an end-of-turn boundary. Clients can use this signal to drive low-latency UI cues or to pre-warm a response without waiting for the final speechstopped commit. May be followed by `inputaudiobuffer.turnsuggestion_revoked` if the user resumes speaking.
Payload
Example
{
"event_id": "string",
"item_id": "string",
"utterance_index": 0,
"probability": 0,
"trailing_silence_ms": 0,
"audio_duration_ms": 0,
"inference_ms": 0
}input_audio_buffer.turn_suggestion_revoked
Emitted when the user resumes speaking after a previous turnsuggestion. Pairs with the most recent turnsuggestion sharing the same utterance_index.
Payload
Example
{
"event_id": "string",
"item_id": "string",
"utterance_index": 0
}output_audio_buffer.started
output_audio_buffer.stopped
output_audio_buffer.cleared
response.backchannel.audio.delta
Streaming PCM audio chunk for a low-latency back-channel interjection (e.g. "uh-huh", "right") emitted while the user is mid-utterance. Out-of-band from the main response stream — use backchannel_id to group chunks belonging to the same interjection.
Payload
Synthetic ID grouping deltas + done for a single back-channel interjection. Use as the playback bucket key so chunks of one interjection don't collide with the active response item.
Example
{
"event_id": "string",
"backchannel_id": "string",
"delta": "string"
}response.backchannel.audio.done
All audio for a back-channel interjection has been streamed. No teardown required — playback queues until exhausted.
Payload
Example
{
"event_id": "string",
"backchannel_id": "string",
"phrase": "string"
}response.backchannel.skipped
An evaluation tick chose not to fire a back-channel. Useful for client-side telemetry; clients that don't care can ignore this event.
Payload
Example
{
"event_id": "string",
"reason": "string"
}