# Model lifecycle

> How models are added, deprecated, and retired on Kurrens, and how much notice you get.

Open-weight models move fast. We add new releases quickly and retire old ones on a fixed, predictable schedule, so you
can plan upgrades instead of reacting to them.

<Steps>

1. **Available.** The model is listed in the [catalog](/docs/getting-started/models) and in
   [kurrens.ai/models.json](/models.json). New releases are announced in the [Changelog](/docs/models/changelog).

2. **Deprecated.** We announce the retirement date **at least 30 days in advance**: by email to accounts that used the
   model in the previous 30 days, in the [Changelog](/docs/models/changelog), and on
   [kurrens.ai/models/retirements](/models/retirements). The model keeps working normally until then.
   Its entry in `models.json` gains a `deprecation_date`, which OpenRouter also reads.

3. **Retired.** From the retirement date, requests to the model return `404` with the error code `model_retired` and the
   recommended replacement.

</Steps>

## What you'll get in the notice

- The retirement date (at 13:00 UTC).
- The recommended replacement model and anything that differs: context window, precision, capabilities, price.
- For dedicated endpoints, a migration window agreed with you — dedicated models are not retired on the public schedule.

## Handling retirement in code

```json
{
  "error": {
    "type": "invalid_request_error",
    "code": "model_retired",
    "message": "deepseek-ai/DeepSeek-V4-Flash was retired on 2026-11-30. Use deepseek-ai/DeepSeek-V4-Flash-0731."
  }
}
```

Catch `404` responses with `code: "model_retired"` and switch to the replacement, or pin model ids in configuration so an
upgrade is a one-line change.

<Aside type="tip" title="Want a model we don't serve?">
  [Request it](/contact?topic=model-request). We prioritize models by demand, license, and whether they
  fill a gap in the market.
</Aside>
