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

# OpenAI migration

> Migrate from the OpenAI Realtime API to Inworld's Realtime API.

If you're already using the [OpenAI Realtime API](https://developers.openai.com/api/docs/guides/realtime), you can switch to Inworld with minimal code changes. Inworld supports the OpenAI Realtime API's core session and event shapes.

## What stays the same

* Event types: `session.update`, `conversation.item.create`, `response.create`, streaming deltas, etc.
* Session config: `instructions`, `audio.input`, `audio.output`, `tools`, etc.
* OpenAI-defined client and server event shapes
* Stream audio in and receive streaming audio out with interruption-handling enabled out-of-the-box

## What changes

### Tool continuation

Inworld automatically starts a follow-up response after a `function_call_output` by default. OpenAI clients normally send `response.create` themselves. Preserve that client-controlled behavior by setting:

```json theme={"system"}
{
  "providerData": {
    "auto_tool_response": false
  }
}
```

Without this setting, do not send `response.create` after the tool output or you may start a duplicate response.

### Inworld extensions

Inworld adds optional configuration under [`providerData`](/realtime/provider-data) and extension events for features such as back-channel responses and turn suggestions. These additions do not change the OpenAI-defined core event shapes.

### Router

With the Inworld Realtime API you can leverage your [routers](/router/introduction) to have a single voice agent dynamically handle many different user cohorts.

### Custom Voices

Cloned or designed voices are usable by your realtime agents and are configurable with a `session.update` event.

### Endpoints

| Transport  | OpenAI                                       | Inworld                                                                           |
| ---------- | -------------------------------------------- | --------------------------------------------------------------------------------- |
| WebSocket  | `wss://api.openai.com/v1/realtime?model=...` | `wss://api.inworld.ai/api/v1/realtime/session?key=<session-id>&protocol=realtime` |
| WebRTC SDP | `https://api.openai.com/v1/realtime/calls`   | `https://api.inworld.ai/v1/realtime/calls`                                        |

### Session setup

You need a session ID from your Inworld app before connecting. Pass it as the `key` query parameter for WebSocket.

## Full reference

For event schemas and exhaustive details, see the [WebSocket API reference](/api-reference/realtimeAPI/realtime/realtime-websocket). Review the [Realtime API release notes](/release-notes/realtime) for client-visible compatibility changes.
