Your model has a shutdown date.
Find every retiring model in your code, then test the replacement on your real requests before you switch.
npx swapvera-scan .Free, open source, no signup. Your code stays on your machine. Add it to CI
| Shutdown | Model | Replacement | Days | |
|---|---|---|---|---|
| Nov 30, 2026 | Claude Sonnet 4.5claude-sonnet-4-5 Claude API | Claude Sonnet 5.5 | 28days left | Check the switch |
| Dec 1, 2026 | gpt-image-1-mini and gpt-image-1.5gpt-image-1-mini, gpt-image-1.5, chatgpt-image-latest OpenAI API | gpt-image-2.5 (sunburst or flare) | 29days left | Check the switch |
| Dec 11, 2026 | GPT-5, GPT-5 Pro and o3gpt-5, gpt-5-pro, o3, o3-pro OpenAI API | GPT-5.6 Sol | 39days left | Check the switch |
| Dec 11, 2026 | GPT-5 minigpt-5-mini OpenAI API | GPT-5.6 Terra | 39days left | Check the switch |
| Dec 11, 2026 | GPT-5 nanogpt-5-nano OpenAI API | GPT-5.6 Luna | 39days left | Check the switch |
| Jan 6, 2027 | tts-1 and gpt-4o-mini-ttstts-1, tts-1-hd, gpt-4o-mini-tts OpenAI API | gpt-realtime-2.1-mini | 65days left | Check the switch |
| Jan 14, 2027 | GPT-4o, GPT-4o mini, GPT-4.1 and GPT-4.1 minigpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini OpenAI API | GPT-6 Luna | 73days left | Check the switch |
| Jan 20, 2027 | gpt-realtime and gpt-4o-realtimegpt-realtime, gpt-4o-realtime OpenAI API | gpt-realtime-2.1 | 79days left | Check the switch |
| Jan 20, 2027 | gpt-realtime-mini and gpt-4o-mini-realtimegpt-realtime-mini, gpt-4o-mini-realtime OpenAI API | gpt-realtime-2.1-mini | 79days left | Check the switch |
Changing a model ID takes one line. Knowing what it broke doesn’t.
Models fail quietly: a JSON field changes type, a policy stops being quoted, a tool stops being called. Swapvera checks that on your traffic.
# example output
$ npx swapvera-scan .
[!] Claude Sonnet 4.5: 28 days left (shutdown 2026-11-30)
replacement: Claude Sonnet 5.5
src/llm/client.ts:12 claude-sonnet-4-5
Find
The scanner flags retiring models in your repo, with the date and the replacement.
Connect
Wrap your client in one line. Real calls are grouped by feature. If we are down, your app doesn’t notice.
Replay
Your requests run on both models, on your provider account. What your answers always do becomes a check.
Decide
A judge is tested on your own answers first. Then you get a verdict that stays valid when cases stop early.
A real verdict, not a demo
We ran this on our own app, which corrects Catalan for primary school worksheets. Haiku was 86% cheaper per call, but it clearly got worse on corrections Sonnet handled well.
A verdict can be safe, review, do not migrate or inconclusive. It covers only the cases compared. So far we have tested it with Anthropic models, on our own app. Why not script this yourself?
- Cost per 1,000 calls
- $0.80 → $0.11
- Hard checks passed
- 88% → 84%
- Clear regressions
- 10 cases
| Correction | Sonnet | Haiku |
|---|---|---|
| néts → nets | 19/19 | 4/19 |
| enterar → assabentar | 15/15 | 1/15 |
| despedir → acomiadar | 15/15 | 2/15 |
| d’averiguar → d’esbrinar | 15/15 | 0/15 |
Pricing
One comparison answers one question: can this feature use that model? The judge is included. Generations run on your own provider account, and you see their cost before you start.
| Plan | Price | Includes | Also | Choose |
|---|---|---|---|---|
| Free | 0 € | 1 comparison, up to 40 requests | Dashboard, scanner, retirement alerts and a monthly savings report | Join the waitlist |
| Pro | 99 € / month | 3 comparisons a month | Verdict on pull requests, extras at 19 € that never expire | Request Pro |
| Team | 199 € / month | 15 comparisons a month | Every feature of every app, shared migration atlas | Request Team |
| One-off | 79 € once | 1 comparison, up to 150 requests | No subscription. For the week the deprecation email lands | Request one |
Join the waitlist
We are onboarding teams one by one. Pick a plan and we will email you your key.
Questions
What data do you keep?
With the dashboard, the SDK sends a sample of your calls (prompts and answers): we need them to replay your real requests. They are stored in the EU, never used to train models or shared, and deleted after 30 days (you choose 1 to 90). Your provider key is stored encrypted and only used for comparisons you start, which you pay to your provider as today. If nothing may leave your infrastructure, use the CLI instead: generations run on your machine and the hosted judge stores nothing.
Why should I trust an AI judge?
You do not have to trust it blindly. Before each verdict it is tested on your own answers, damaged in ways it must notice; if it fails, a more capable judge takes over, and the report shows what it can and cannot see. Hard checks decide first. Every pair where it matters is judged with the order swapped, and answers that flip count as ties. Today our judges run on Claude: if you compare two Claude models, the judge shares their family, and the report says so. Label 30 to 50 pairs yourself and the verdict is recomputed with the judge's bias corrected against your labels.
Why not just swap the model ID and watch production?
Because the failures are quiet: a JSON field that changes type, a policy the new model stops quoting, a tool it stops calling. Users notice before your dashboards do.
I don't have test cases. Can I still use it?
Yes. Convert production logs with one command, or generate realistic inputs from your system prompt.
Do you learn from my verdicts?
Only if you opt in with --share. Then the engine sends anonymous categories (output format, check types, which ones got worse), never prompts or outputs, to the migration atlas. Nothing about a migration is published until 5 different teams have shared it.
Which providers are supported?
Anthropic is tested with real calls. OpenAI, the Gemini API and OpenAI-compatible servers work in the CLI and are coming to the dashboard once they have passed the same test.
Where do the shutdown dates come from?
From each provider’s announcements. Every entry in the registry links its source, and the scanner is open source so you can check it.