For AI agents: markdown of this page — /docs-content-en/ai/models/lifecycle.md documentation index — /llms.txt
Model lifecycle
A model in the Vibecode catalog is in one of three states. The state determines whether the call is served by the requested model and which signals arrive in the response headers. The rules are common to all model calls — chat, embeddings and speech recognition.
| State | What happens on a call | Response headers |
|---|---|---|
ACTIVE |
Standard service, no signals to the client | — |
DEPRECATED |
The request is served by the requested model, and deprecation signals arrive in the headers | Deprecation: true, Sunset: <disable date> if one is assigned, Link: </v1/models/<successor>>; rel="successor-version" and X-Model-Replacement: <successor id> if a successor is assigned |
DISABLED |
The request is transparently redirected to the successor model. response.model contains the model that actually served it |
X-Model-Fallback: <requested modelId>, X-Model-Replacement: <actual modelId>, X-Model-Fallback-Reason: model_disabled |
What the client should do
Deprecation: true— flag the model's usage in your logs. If aLink: rel=successor-versionis present, plan the migration. Until theSunsetdate the model works; after it the model will be disabled.X-Model-ReplacementwithoutX-Model-Fallback— this is the recommended successor model for future requests. You can switch immediately.X-Model-Fallbackpresent — the model is already disabled, and the response came from the successor. Its identifier is inresponse.model. Updatemodelin your code to this identifier or keep the old one: the redirect will keep working.
If no successor is configured for a disabled model, the call returns 503 model_unavailable. This is the only case where the redirect for the DISABLED state does not fire.
Signal in the model catalog
In GET /v1/models models in the DEPRECATED state remain — the client sees that they still work. Models in the DISABLED state are hidden from the catalog, but a direct request by their modelId still goes through the redirect to the successor.
You can check the state of a specific model via GET /v1/models/:modelId: for a retired model the response gains a replaced_by field with the successor's identifier, and pricing shows the successor's price — the one the call is actually billed at.
Known specifics
The headers follow the standards. Deprecation, Sunset and Link follow RFC 8594 and RFC 8288, so they are recognized by standard HTTP clients without extra code.
The redirect does not change the request's price. The call is billed at the price of the model that actually served it. For a disabled model this is the successor's price, not its own.