← Blog
October 15, 2026 · 17 min

Same slug, different model: aliases, retirements and dated prices

An agent that pays per call is paying for a string. In the last week, Google started routing two "stable" model IDs to newer models, OpenAI gave three months' notice on GPT-4o, and a model released on Tuesday arrived with a price that doubles on December 1. None of it shows up in a 402.

When an agent sends model: "x" and signs a payment, three questions decide whether it got what it paid for. Which weights does x name today? How long will x keep working? And what will x cost tomorrow? The answers live in provider docs, deprecation tables and changelogs. The payment lives in a signature that covers none of them.

Our sources, all read or pulled on 2026-10-15: Anthropic's model IDs and versioning page, models overview, deprecations page and Models API reference; OpenAI's deprecations page, model pages, pricing page and its OpenAPI spec at 2cc9e14; Google's Gemini models, deprecations, pricing and changelog pages and the generateContent reference; OpenRouter's live model catalog (462 entries), its models guide and its latest-resolution guide; LiteLLM's price map at 3fec507; and the x402 v2 specification at e95b066. We also requested free 402 quotes from our own gateway for 30 model strings.

The short version: the three big providers now give three different answers to "does this string ever change," and one of them changed the answer for two IDs labelled stable. The catalogs downstream lag in both directions: they price a rerouted model at its old rate, and they carry expiration dates for routes rather than models. x402 commits to none of it. And our own 402 quotes a rerouted model at 2.4 times its successor, still sells two models Anthropic has retired, and still issues a one-cent quote for model strings we do not have.

Three contracts for one string

Anthropic pins everything. Its versioning page says each model ID "identifies a pinned version of the model," and that from the 4.6 generation on, dateless IDs such as claude-sonnet-4-6 are not evergreen pointers: "It is the snapshot." Older models still have convenience aliases. claude-sonnet-4-5 "resolves to the most recent dated snapshot for that minor version." There is one caveat, and it matters for anyone who replays agent runs: "the serving infrastructure around the model can change over time," including "the request router, safety classifiers, and sampling logic." Fixed weights are not fixed behavior.

OpenAI pins snapshots behind aliases. Each model page lists a default snapshot. gpt-4o resolves to gpt-4o-2024-08-06. gpt-5.5 resolves to gpt-5.5-2026-04-23. From GPT-5.6 on, the pages list the dateless ID as its own snapshot: gpt-6-luna's only snapshot is gpt-6-luna. OpenAI also keeps a deliberately floating name. chat-latest "points to the latest Instant model currently used in ChatGPT," and "the underlying model snapshot will be regularly updated."

Aliases carry prices. The pricing page lists gpt-4o at $2.50 input and $10 output per million tokens and gpt-4o-2024-05-13 at $5 and $15. Same family, two prices, decided by which snapshot the name points at.

Google names four patterns. The models page defines stable, preview, latest and experimental strings. A stable string "points to a specific stable model. Stable models usually don't change." A latest alias "will get hot-swapped with every new release," with "a 2-week notice" by email "for breaking changes." Previews can be deprecated "with at least 2 weeks notice." The changelog shows the hot-swaps happening: on January 21, 2026 gemini-flash-latest moved to gemini-3-flash-preview; on May 19 it moved to gemini-3.5-flash.

Aggregators add a fourth layer. OpenRouter's catalog today has 19 ~author/family-latest aliases, such as ~anthropic/claude-opus-latest, which resolves to Claude Opus 5.5. Its latest-resolution guide is candid: "Versions can change at any time." Every entry also has a canonical_slug, documented as the "permanent slug for the model that never changes." In 317 of 462 entries it differs from the ID you call: openai/gpt-5.5 is canonically openai/gpt-5.5-20260423. The dates are the aggregator's own. Anthropic's Opus 4.5 snapshot is claude-opus-4-5-20251101; its canonical slug there ends in 20251124.

When a stable ID reroutes

On October 8, Google's changelog announced two deprecations of a kind the four patterns do not describe. gemini-3.7-flash "is deprecated and has been replaced by gemini-3.8-flash," and "API requests to gemini-3.7-flash are automatically routed to gemini-3.8-flash." The same text applies to gemini-3.5-flash, now routed to gemini-3.6-flash. The deprecations table lists both with a shutdown date of "N/A": "the endpoint is not shutting down."

Both were stable strings. Neither returns an error. A pinned agent keeps working and runs a different model.

The difference is not cosmetic. Google's 3.6 Flash guide describes a model that "completes multi-step workflows with fewer reasoning steps, conversational turns, and tool calls than Gemini 3.5." It also changes the request contract. From 3.6 Flash on, temperature, top_p and top_k are deprecated: "The API ignores these parameters and returns an error in future model generations." An agent that pinned gemini-3.5-flash with temperature: 0 for repeatable outputs now gets a model that ignores the setting.

Price moved too. The same guide lists 3.6 Flash at $1.50 input and $7.50 output, "versus $9.00/1M for 3.5 Flash." The pricing page no longer lists 3.5 Flash or 3.7 Flash at all. Neither page says which price a routed request is billed at.

The catalogs have not caught up. OpenRouter still lists google/gemini-3.5-flash at $1.50 and $9.00 on its standard endpoints, with no expiration date. LiteLLM's gemini/gemini-3.5-flash entry carries the same prices and no deprecation date. Its Vertex AI entry under the same name carries a deprecation date of May 19, 2027. One string, three catalog entries, three different answers.

The latest aliases now disagree as well. OpenRouter's ~google/gemini-flash-latest resolves to gemini-3.8-flash. The last change to Google's own gemini-flash-latest recorded in its changelog is the May 19 move to gemini-3.5-flash, the ID that now routes to 3.6.

The retirement calendar

Retirements are better documented than reroutes. Each provider states a notice period. OpenAI's deprecations page promises at least six months for generally available models, three months for specialized variants such as chat and Codex models, and as little as two weeks for previews. Anthropic's deprecations page promises "at least 60 days' notice" for publicly released models. Google gives previews at least two weeks.

Yesterday's OpenAI notice is worth reading closely. On October 14, OpenAI notified developers that GPT-4o (gpt-4o-2024-08-06, gpt-4o-2024-11-20), GPT-4o mini, GPT-4.1 and GPT-4.1 mini leave the API on January 14, 2027, with gpt-6-luna as the replacement. That is three months for generally available models. The same page states a six-month minimum for that category "unless safety or compliance concerns require a faster timeline," and gives no reason for this one. The row names the family and its snapshots. It does not spell out what the bare gpt-4o alias does afterwards.

Here is the near calendar for text models, from the three deprecation pages and the Gemini pricing page:

# read 2026-10-15; "earliest" = Anthropic's "not sooner than"
2026-10-15  Anthropic earliest claude-haiku-4-5-20251001
2026-10-23  OpenAI shutdown   gpt-3.5-turbo, gpt-4, gpt-4-turbo, gpt-4.1-nano,
                              gpt-4o-2024-05-13, o1, o1-pro, o3-mini, o4-mini
2026-11-24  Anthropic earliest claude-opus-4-5-20251101
2026-11-30  Anthropic retire   claude-sonnet-4-5-20250929  -> claude-sonnet-5-5
2026-12-01  Google price      gemini-4-argon  $2/$10 -> $4/$20
2026-12-11  OpenAI shutdown   gpt-5-2025-08-07 (+mini, nano), gpt-5-pro-2025-10-06,
                              o3-2025-04-16, o3-pro-2025-06-10
2027-01-01  Google price      gemini-3.6-flash, gemini-3.8-flash  $0.75/$3.75 -> $1.50/$7.50
2027-01-14  OpenAI shutdown   gpt-4o-2024-08-06, gpt-4o-2024-11-20,
                              gpt-4o-mini-2024-07-18, gpt-4.1-2025-04-14,
                              gpt-4.1-mini-2025-04-14
2027-04-01  OpenAI shutdown   gpt-5.1, gpt-5.3-codex, gpt-5.4-nano

All three providers now publish lifecycle data a machine can read. Only one sends it with the response. OpenAI's GET /v1/models returns an optional shutdown_date. Anthropic's Models API returns lifecycle (active, deprecated or retired), deprecated_at and retires_at, with a careful note: "A past date on a deprecated model means retirement is overdue, not that it has occurred." Retired models appear only if you ask for them.

Gemini goes furthest. Every GenerateContentResponse can carry a modelStatus object with a modelStage (from EXPERIMENTAL through STABLE and LEGACY to RETIRED), a retirementTime and a message, next to a modelVersion field described as "the model version used to generate the response." That is the retirement notice delivered on the call itself. The Chat Completions response shape has no field for any of it. A gateway that speaks that shape drops it, which is the same translation loss we found for refusal categories.

What the catalogs know

Most agents never read a deprecation page. They read a catalog: an aggregator's model list, a library's price map, a gateway's /models. We checked two public catalogs against the calendar above.

OpenRouter. Of 462 entries, 20 carry an expiration_date. We mapped the 32 OpenAI text-model identifiers with announced shutdowns to catalog entries by ID or canonical slug. 23 entries cover 27 of them. None of the 23 has an expiration date, including the nine entries for the October 23 batch, eight days out. Six of those nine (gpt-3.5-turbo, gpt-4-turbo, o1, o1-pro, o3-mini, o4-mini) list OpenAI as their only host. The other three also list Azure, which sets its own schedule, so a null date there can be correct.

The field also runs the other way. google/gemini-2.5-flash, 2.5-pro and 2.5-flash-lite carry an expiration date of October 20, 2026. Google's own page says the 2.5 models "are not deprecated and will continue to be served until further notice," although access is limited to past users since September 18. The catalog documents expiration_date as the "deprecation date for the model endpoint." It describes a route, not a model. Routes outlive models too: anthropic/claude-opus-4.1, which Anthropic retired on its own platforms on August 5, is still listed, served only through Amazon Bedrock, with no expiration date. Anthropic's page notes that "Amazon Bedrock and Google Cloud set their own retirement schedules."

The ~latest aliases come with a pricing promise. The guide says their rows "report the pricing ... of the target they currently resolve to," and that "requests are billed at the concrete model's price." In today's listing, 5 of the 19 alias rows show prices that differ from their target's row:

# USD per million tokens, input / output, as listed 2026-10-15
~moonshotai/kimi-latest        0.29 / 24.00   target kimi-k3              0.45 / 15.00
~deepseek/deepseek-pro-latest  0.225 / 8.00   target deepseek-v4-pro-0813 1.32 / 3.96
~z-ai/glm-flash-latest         0.036 / 0.90   target glm-5.3-flash        0.15 / 0.50
~z-ai/glm-latest               0.024 / 4.40   target glm-5.3              0.03 / 4.80
~deepseek/deepseek-v4-flash-latest 0.0144 / 0.576  target deepseek-v4-flash-0731 0.016 / 0.64

The aliases also change the request. The same guide says a ~latest slug "remaps unsupported reasoning parameters": reasoning: { effort: "none" } "is upgraded to the lowest effort the model supports," and enabled: false "is flipped to enabled." On a concrete slug, the same request to a model that requires reasoning returns a 400. An agent that turned reasoning off to cap its bill gets reasoning tokens, which are billed as output, as we measured in our reasoning tokens audit.

LiteLLM. Its price map, updated at 05:29 UTC today, has 4,122 entries, 783 with a deprecation_date and 207 of those already in the past. It carries the exact shutdown date for 27 of the 32 OpenAI identifiers. The five it misses are the January 14 snapshots announced yesterday. The map is maintained closely, and it still trails the source.

Prices with a date attached

The deprecations are the visible half. The other half is prices that change on a calendar. Google's pricing page now writes them as ranges. Gemini 4 Argon, generally available since October 13, is "$2.00 through November 30, 2026. $4.00 starting December 1, 2026" for input and $10 then $20 for output. Gemini 3.8 Flash and 3.6 Flash are $0.75 and $3.75 "through December 31, 2026," then $1.50 and $7.50. When 3.7 Flash launched in August, the changelog called its rate "an introductory price through December 31, 2026."

Neither catalog has anywhere to put that. OpenRouter's pricing object holds one number per token type. LiteLLM's map has no field for an effective date at all; the only date-like key in 4,122 entries is deprecation_date. Its Gemini 4 Argon entry says $2 and $10, which is right through November 30 and wrong from December 1.

For a person on a monthly invoice, that is a surprise on the bill. For an agent with a budget, it is a broken assumption. A spend cap sized from today's list price buys half as many Gemini 4 Argon calls on December 1. Agents with caps are the point of the exercise. The x402 SDK itself ships with a default per-payment cap.

x402 pays for a URL, not a model

The x402 v2 specification describes what a payment is for with a ResourceInfo object: a required url, plus optional description, mimeType, serviceName and tags. Each entry in accepts gives a scheme, network, amount, asset, payee and timeout. Nothing names a model.

For an inference API, the URL is the same for every model. Our 402 says "url": "https://api.llm4agents.com/v1/chat/completions" and "description": "LLM chat completion (x402)" whether the body asks for Gemini or Claude. The EIP-3009 authorization the agent signs covers from, to, value, a validity window and a nonce. The model string sits in the request body, outside anything signed.

So the receipt is the response. OpenAI's spec describes the response model as "the model used for the chat completion." Gemini adds modelVersion. OpenRouter's guide says that for ~latest slugs "the response's model field reflects the concrete model that actually served the request." Our gateway returns X-Model-Used on paid responses. These fields say what the serving layer reports. They are not proof of which weights ran; that is the problem we looked at in our attested inference audit. But they are the only record an agent gets, and most agents never log them.

Our own 402, probed

A 402 is free to request, so we asked our gateway for quotes. One-word prompt, no payment, amounts read from the payment-required header, October 15:

# max_tokens 100,000; quote in USDC on Base
google/gemini-3.5-flash     $1.09   # routed by Google to 3.6 Flash
google/gemini-3.6-flash     $0.46
google/gemini-3.7-flash     $0.46   # routed by Google to 3.8 Flash
google/gemini-3.8-flash     $0.46
openai/gpt-4o               $1.21
openai/gpt-4o-2024-05-13    $1.81   # OpenAI shutdown Oct 23
anthropic/claude-sonnet-4   $1.81   # retired by Anthropic Jun 15
anthropic/claude-opus-4.1   $9.01   # retired by Anthropic Aug 5

# max_tokens 10,000; OpenAI shutdown Oct 23
openai/gpt-3.5-turbo $0.02   openai/gpt-4-turbo $0.37   openai/o1 $0.73
openai/o3-mini       $0.06   openai/o4-mini     $0.06

# not in our catalog
~google/gemini-flash-latest   $0.01
~anthropic/claude-opus-latest $0.01
openai/gpt-5.5-20260423       $0.01
anthropic/claude-3-opus       $0.01
nonexistent/model-xyz         $0.01

Four findings.

First, the rerouted model is quoted at its old price. gemini-3.5-flash costs an agent 2.4 times as much authorization as the 3.6 Flash that Google says now answers it. The quote is the amount the agent must sign, and so the amount its spend cap has to allow.

Second, we sell what the first party has retired. Claude Sonnet 4 and Claude Opus 4.1 quote normally. They may well run, through a partner cloud with its own schedule. But nothing in the 402 or the model list says so.

Third, five models that OpenAI shuts down in eight days quote like any other. Unless another host picks them up, after October 23 they will fail after the agent has signed. Our walk-up path settles nothing on an error, so the agent loses no money. It loses a round trip and a fallback decision it could have made before paying.

Fourth, strings we do not have still get a one-cent quote: aliases, a dated canonical slug, a model retired in January and a made-up name. We flagged this in the reasoning tokens audit on October 3. It is still true.

Our public model list adds no lifecycle data either. The ModelInfo object in our OpenAPI contract has slug, displayName, provider, two prices, contextWindow and lastSyncedAt. There is no lifecycle stage, no retirement date, no routing target and no effective date for a price.

What it means for LLM4Agents

We sell model strings, and the meaning of a string is set by someone else. A provider can reroute it, retire it, reprice it or let a partner cloud keep it alive. Each change reaches our catalog only when our price source reflects it. None of it reaches the agent through the 402.

That makes the gateway the right place to fix it. An agent cannot read three deprecation pages, a changelog and a partner cloud's schedule before every call. We can, once, for everyone. The providers have done the hard part: shutdown_date, retires_at and modelStatus exist. The work is to carry them across the boundary instead of dropping them.

It also changes how fallback chains should work. A chain that discovers a retired model by failing on it is a chain that pays latency for information that was published months earlier. A retired link should be skipped before the quote, not after the signature.

The threat is quieter than an outage. A rerouted stable ID does not fail. It answers, from a different model, at a price nobody downstream has updated, while ignoring a parameter the agent relied on. An agent that pinned a model for reproducibility loses reproducibility without any error to catch. If we pass that through silently, we are part of the problem.

Staying on the frontier

In order of cost and urgency.

1. Reject before the 402. Unknown strings get a 404 with the closest valid slugs, not a one-cent quote. Strings past their first-party retirement with no live route get a 410 with the provider's recommended replacement. This is a lookup we already do; it just runs after the payment instead of before it.

2. Put lifecycle in the catalog. Add lifecycle, retiresAt, routedTo and providerModelId to ModelInfo. Source them from the first-party APIs (OpenAI's shutdown_date, Anthropic's retires_at) and from the deprecation pages, not only from a downstream listing. A route's expiry and a model's retirement are different fields.

3. Price reroutes at the target. Keep a small reroute table, starting with gemini-3.5-flash to gemini-3.6-flash and gemini-3.7-flash to gemini-3.8-flash. Quote the routed request at the target's price, and say so in the response.

4. Load dated prices before their dates. Store prices with an effectiveFrom, publish upcoming changes in the model list, and quote with the price that will be in force when the payment settles. December 1 and January 1 are already on the calendar.

5. Signal deprecation on the response. When a request names a model with a scheduled retirement, return Sunset (RFC 8594) and Deprecation (RFC 9745) headers with a link to the replacement. Both RFCs scope the signal to a URI, and our URI is shared by every model, so send them per request. Forward Gemini's modelStatus.message where we have it.

6. Make the receipt name the model. Keep X-Model-Used, add the provider's snapshot or modelVersion, and put the requested string, the resolved model and the price basis in the 402's resource.description. It is not signed, but it lets an agent log what it was quoted for next to what it got.

7. Keep floating aliases out of walk-up payments. Do not offer ~latest-style aliases on the x402 path until the quote can be priced at the current target and the parameter remapping is disclosed. A string whose model, price and parameters can all change between two calls is the opposite of what a signed quote is for.

8. Run today's census daily. Diff the three deprecation pages, the Gemini changelog and the Models APIs against our catalog. Alert when a slug we sell has a first-party retirement less than 30 days out, a reroute, or a dated price change. The probes in this post took minutes; they should run every day.

Pay per call, in stablecoins, over an OpenAI-compatible API

One 402, one signature, 345+ models. No subscription, no minimum.

Register your agent