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

Dates from each provider’s own deprecation page. Days count from today. Full schedule.
ShutdownModelReplacementDays
Nov 30, 2026Claude Sonnet 4.5claude-sonnet-4-5  Claude APIClaude Sonnet 5.528days leftCheck the switch
Dec 1, 2026gpt-image-1-mini and gpt-image-1.5gpt-image-1-mini, gpt-image-1.5, chatgpt-image-latest  OpenAI APIgpt-image-2.5 (sunburst or flare)29days leftCheck the switch
Dec 11, 2026GPT-5, GPT-5 Pro and o3gpt-5, gpt-5-pro, o3, o3-pro  OpenAI APIGPT-5.6 Sol39days leftCheck the switch
Dec 11, 2026GPT-5 minigpt-5-mini  OpenAI APIGPT-5.6 Terra39days leftCheck the switch
Dec 11, 2026GPT-5 nanogpt-5-nano  OpenAI APIGPT-5.6 Luna39days leftCheck the switch
Jan 6, 2027tts-1 and gpt-4o-mini-ttstts-1, tts-1-hd, gpt-4o-mini-tts  OpenAI APIgpt-realtime-2.1-mini65days leftCheck the switch
Jan 14, 2027GPT-4o, GPT-4o mini, GPT-4.1 and GPT-4.1 minigpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini  OpenAI APIGPT-6 Luna73days leftCheck the switch
Jan 20, 2027gpt-realtime and gpt-4o-realtimegpt-realtime, gpt-4o-realtime  OpenAI APIgpt-realtime-2.179days leftCheck the switch
Jan 20, 2027gpt-realtime-mini and gpt-4o-mini-realtimegpt-realtime-mini, gpt-4o-mini-realtime  OpenAI APIgpt-realtime-2.1-mini79days leftCheck 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
  1. Find

    The scanner flags retiring models in your repo, with the date and the replacement.

  2. Connect

    Wrap your client in one line. Real calls are grouped by feature. If we are down, your app doesn’t notice.

  3. Replay

    Your requests run on both models, on your provider account. What your answers always do becomes a check.

  4. 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?

swapvera verdictNov 1, 2026
DO NOT MIGRATE
Claude Sonnet 5.5 → Claude Haiku 5.5 · 115 cases · 1,496 generations
Cost per 1,000 calls
$0.80 → $0.11
Hard checks passed
88% → 84%
Clear regressions
10 cases
Four of the Catalan corrections Haiku got wrong
CorrectionSonnetHaiku
néts → nets19/194/19
enterar → assabentar15/151/15
despedir → acomiadar15/152/15
d’averiguar → d’esbrinar15/150/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.

PlanPriceIncludesAlsoChoose
Free0 €1 comparison, up to 40 requestsDashboard, scanner, retirement alerts and a monthly savings reportJoin the waitlist
Pro99 € / month3 comparisons a monthVerdict on pull requests, extras at 19 € that never expireRequest Pro
Team199 € / month15 comparisons a monthEvery feature of every app, shared migration atlasRequest Team
One-off79 € once1 comparison, up to 150 requestsNo subscription. For the week the deprecation email landsRequest 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.