<!-- source: https://modelux.ai/docs/guides/openai-migration -->

> Move your app from direct OpenAI to Modelux in 3 lines.

# Migrating from OpenAI

If your app already uses the OpenAI SDK, you can point it at Modelux with
three changes — no other code modifications needed.

## 1. Add OpenAI as a provider in Modelux

In the dashboard, add your existing OpenAI API key as a provider. Modelux
will use that key to proxy requests — you keep your existing OpenAI account,
billing, and rate limits.

## 2. Create a Modelux API key

Create a project, then generate an API key scoped to it. Copy the
`mlx_sk_...` value.

## 3. Update your client config

Change two lines in your app:

```diff
  from openai import OpenAI

  client = OpenAI(
-     api_key=os.environ["OPENAI_API_KEY"],
+     base_url="https://api.modelux.ai/v1",
+     api_key=os.environ["MODELUX_API_KEY"],
  )
```

That's it. Your existing `client.chat.completions.create(...)` calls work
unchanged. Model names like `gpt-4o-mini` are routed to OpenAI through your
credentials.

## What you get for free

Just by routing through Modelux, with zero other code changes:

- **Full request logs** with searchable traces
- **Per-request cost tracking**
- **Latency percentiles** by model
- **Team-level analytics** if multiple apps share one org

## Next steps

Once traffic is flowing, you can add value without further code changes:

- **Add a fallback chain** to improve reliability — create a routing config
  `@production` that falls back from `gpt-4o-mini` to `claude-haiku-4-5`,
  then update your app to call `model="@production"` instead of `gpt-4o-mini`.
- **Set a monthly budget** with auto-downgrade to cap your spend.
- **Enable the replay simulator** to test changes against historical traffic.

## Streaming still works

Streaming responses pass through unchanged:

```python
stream = client.chat.completions.create(
    model="@production",
    messages=[...],
    stream=True,
)
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="")
```
