Move an existing integration without a rewrite
The people who search for migration guides already have a working, paid integration. Their real question is not how to call a new API, but what breaks when the endpoint changes underneath an existing client. These guides cover the schema differences, the fallback order, and a cutover you can reverse.
Request fields that do not survive a base URL swap
A gateway makes routing a one-line change, but it does not translate one vendor's request schema into another's. These six fields are where a shadow-mode cutover actually finds surprises.
| OpenAI | Anthropic | What breaks |
|---|---|---|
messages | messages | Both take a role/content array |
max_tokens | max_tokens | Anthropic requires it; OpenAI defaults it |
stop | stop_sequences | String vs array |
tools | tools | tool_choice and tool_result shapes differ |
stream | stream | SSE event names differ |
system prompt | system (top-level) | OpenAI puts it in messages with role=system |
Browse the other clusters
All 4 guides in this cluster
- Model fallback: the difference between a retry and a chain
- Moving an existing OpenAI integration to one endpoint
- Route by difficulty: one Cursor month, two models
- Why the same model has two prices
FAQ
Does a gateway translate between request schemas?
No. An OpenAI-compatible route accepts the OpenAI request shape. Moving from that shape to an Anthropic one requires mapping fields such as stop sequences, tool results and the system prompt; the table above lists the six that most often break.
What is a shadow-mode cutover?
Run both routes against the same inputs for a period, compare responses and token usage, then move traffic only when the new route matches. It keeps the original key available if tool calling or streaming behaves differently.
Should I configure a fallback chain?
A fallback chain helps when a model or provider is unavailable, but it can silently route a workload to a differently priced model. Log the model ID actually used on each request before enabling it.
Check the current rate for your model before you commit a workload.