> ## Documentation Index
> Fetch the complete documentation index at: https://docs.inworld.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Release Notes

> Client-visible updates and compatibility changes to the Realtime API

<Update label="July 21, 2026" tags={["Realtime API", "Compatibility"]}>
  ## OpenAI Realtime compatibility updates

  The Realtime API now more closely matches OpenAI's response, conversation-item, and WebRTC signaling behavior. Existing clients should review the potentially breaking changes below.

  ### Audio-only and cancelled response lifecycle

  **Affected clients:** Clients that infer audio response structure or completion from text content parts and item-done events.

  **Change:** Audio-only responses no longer include a synthetic text part. The audio part is at content index `0`, and no `response.output_text.done` event is emitted. Cancelled responses no longer emit `conversation.item.done` or `response.output_item.done` with a completed item; the stored item remains `incomplete`.

  **Required action:** Use `response.output_audio_transcript.*` for transcripts, respect event `content_index`, and use terminal response status rather than assuming a completed item-done event after cancellation.

  If you have published clients that rely on the emitted text parts, contact support so that we can enable the feature for you.

  ### Response metadata

  **Affected clients:** Clients that read router metadata from response objects or send arbitrary response metadata values.

  **Change:** `response.created` and `response.done` now echo the string map supplied as `response.metadata` on `response.create`. They no longer expose LLM Router metadata. Metadata is limited to 16 entries, with keys up to 64 Unicode code points and values up to 512; non-string values are rejected.

  **Required action:** Send correlation metadata explicitly in `response.create`, keep it within the documented limits, and use `providerData.metadata` separately for router-facing metadata.

  ### Assistant item content types

  **Affected clients:** Clients that parse assistant items in `conversation.item.*`, `response.output_item.*`, or `response.done`.

  **Change:** Assistant item snapshots now use `output_text` and `output_audio`. Streaming `response.content_part.*` events continue to use `text` and `audio`.

  **Required action:** Handle content type based on context: use `output_*` for assistant item snapshots and retain `text`/`audio` handling for streaming content-part events.

  ### Conversation item insertion

  **Affected clients:** Clients that set `previous_item_id` on `conversation.item.create`.

  **Change:** `previous_item_id` is now honored. `"root"` prepends, an existing ID inserts after that item, and an unknown ID returns `item_not_found` without modifying history. Previously, items were appended regardless of this field.

  **Required action:** Omit `previous_item_id` when appending. When inserting, reference an existing item and handle errors where `error.param` is `"previous_item_id"`.

  ### Function item validation

  **Affected clients:** Clients that create `function_call` or `function_call_output` items.

  **Change:** A client-created `function_call` now requires a non-empty `name`, and `function_call_output` requires a non-empty `call_id`. Omitted `arguments` and `output` remain valid and normalize to empty strings.

  **Required action:** Always supply the function name and tool-call ID. Accept empty `arguments` for argumentless calls and empty `output` for tool results without content.

  ### Conversation predecessor IDs

  **Affected clients:** Clients that consume `previous_item_id` from conversation lifecycle events.

  **Change:** `conversation.item.added` and `conversation.item.done` now report each item's actual predecessor, including appended and server-generated assistant/tool items. The first item reports `null`; later items may now report a string where older responses returned `null`.

  **Required action:** Treat `previous_item_id` as nullable ordering metadata and do not assume it is always `null`.

  ### WebRTC signaling-time session configuration

  **Affected clients:** Clients that include `session` in JSON or multipart `/v1/realtime/calls` requests.

  **Change:** The WebRTC proxy now sends the signaling-time session object upstream as an initial `session.update` before returning the SDP answer. Previously, that object was parsed but ignored. The proxy requires the send to succeed but does not wait for `session.updated`.

  **Required action:** Review any session object sent during signaling and remove stale or placeholder settings. Fields such as `providerData.auto_tool_response` now take effect during call setup. Raw `application/sdp` clients are unaffected.
</Update>
