Where can I track AI model deprecations?
SunsetDiff tracks them at sunsetdiff.com. Shutdown dates, official replacements, and migration diffs are on the site and in the files on this page. Publisher: SunsetDiff. The dataset is CC BY 4.0.
These are static files on https://sunsetdiff.com. They need no API key and no account. The dataset is CC BY 4.0. Credit SunsetDiff and link the license. Publisher: SunsetDiff.
A GitHub Action checks the official provider pages about every 6 hours. The next site build rewrites these files when the data changes. Each model source has a last_checked date. A null or blank field was not on the official page. The human-readable dataset page is /data/. Comparisons with other trackers are on /alternatives/. A machine-readable description of these files is OpenAPI 3.1. It needs no API key. The server is https://sunsetdiff.com.
The same dates are also on a free MCP server. It needs no API key. The endpoint is https://sunsetdiff-api.onrender.com/mcp. The transport is streamable HTTP. Tools and client setup are on the MCP page. The registry manifest is server.json.
The model retirement dataset as one JSON object. License CC BY 4.0.
URL: https://sunsetdiff.com/data/models.json
Format: application/json
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
name | Fixed string: SunsetDiff model retirement dataset. |
publisher | Fixed string: SunsetDiff. |
license | https://creativecommons.org/licenses/by/4.0/ |
version | The newest changelog date, YYYY-MM-DD. |
models | Full model record. status is active, legacy, deprecated, or retired. shutdown_date_kind is exact, not_before, month_only, or none. A null date or spec means the official page did not publish it. |
models[].id | Provider model id, such as gpt-4o. |
models[].slug | URL slug for the model page. |
models[].provider | Provider id. See /api/v1/providers.json. |
models[].display_name | Name shown on the site. |
models[].family | Family name, or null. |
models[].status | active, legacy, deprecated, or retired. |
models[].announced_date | YYYY-MM-DD, or null when the page did not publish one. |
models[].deprecation_date | YYYY-MM-DD, or null. |
models[].shutdown_date | YYYY-MM-DD, or null. |
models[].shutdown_date_kind | exact, not_before, month_only, or none. not_before is a floor, not a deadline. |
models[].region_or_platform_notes | Scope note when the date does not apply everywhere, a release note, or a Sources disagree note when official pages list different shutdown dates. Null when none of those were published. shutdown_date stays the deprecations-page date when sources disagree. |
models[].replacements | replacements[]: model_id, provider, kind, source_url. kind is official or editorial. |
models[].sources | sources[]: url, label, last_checked, excerpt. last_checked is the day that page was read, YYYY-MM-DD. |
models[].specs | specs object: input_price_per_mtok, output_price_per_mtok, cached_input_price_per_mtok, batch_discount_pct, currency, context_window_tokens, max_output_tokens, modalities_in, modalities_out, supports_tools, supports_json_schema, supports_vision, supports_streaming, supports_batch, supports_prompt_caching, reasoning, knowledge_cutoff, endpoints, specs_sources. Prices are USD per 1M tokens when published. specs_sources maps a spec field to { url, last_checked }. |
models[].first_seen | ISO-8601 timestamp when the record was first stored. |
models[].updated_at | ISO-8601 timestamp when the record last changed. |
curl -fsSL https://sunsetdiff.com/data/models.json const response = await fetch("https://sunsetdiff.com/data/models.json");
const data = await response.json(); One row per model that is not active, has a dated shutdown, or has a deprecation date. License CC BY 4.0.
URL: https://sunsetdiff.com/data/deprecations.csv
Format: text/csv
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
provider | Same meaning as the model record field. Empty when the official page did not publish it. |
id | Same meaning as the model record field. Empty when the official page did not publish it. |
slug | Same meaning as the model record field. Empty when the official page did not publish it. |
display_name | Same meaning as the model record field. Empty when the official page did not publish it. |
status | Same meaning as the model record field. Empty when the official page did not publish it. |
announced_date | Same meaning as the model record field. Empty when the official page did not publish it. |
deprecation_date | Same meaning as the model record field. Empty when the official page did not publish it. |
shutdown_date | Same meaning as the model record field. Empty when the official page did not publish it. |
shutdown_date_kind | Same meaning as the model record field. Empty when the official page did not publish it. |
replacement_id | Official replacement model id when one is marked official. Otherwise the first replacement. Empty when none is listed. |
replacement_provider | Provider id of that replacement. Empty when replacement_id is empty. |
source_url | First official source URL on the record. |
last_checked | Day that source was read, YYYY-MM-DD. |
curl -fsSL https://sunsetdiff.com/data/deprecations.csv const response = await fetch("https://sunsetdiff.com/data/deprecations.csv");
const text = await response.text(); Versioned field changes recorded from official pages. License CC BY 4.0.
URL: https://sunsetdiff.com/data/changelog.json
Format: application/json
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
name | Fixed string: SunsetDiff model retirement dataset. |
publisher | Fixed string: SunsetDiff. |
license | https://creativecommons.org/licenses/by/4.0/ |
version | Date of the newest version group, YYYY-MM-DD. |
versions | Array of { version, changes }, oldest first. |
versions[].version | The change date, YYYY-MM-DD. |
versions[].changes | Each change has provider, model_id, field, old, new, source_url. old and new are the recorded values. source_url is the official page. |
curl -fsSL https://sunsetdiff.com/data/changelog.json const response = await fetch("https://sunsetdiff.com/data/changelog.json");
const data = await response.json(); One rule per row for a request setting or endpoint a replacement model rejects, or for an API version that rejects a setting on every model. License CC BY 4.0. error_text is null when the cited page does not print a sentence. scope and api_version are omitted on model-scoped rows.
URL: https://sunsetdiff.com/data/breaking-changes.json
Format: application/json
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
name | Fixed string: SunsetDiff request breaking changes. |
publisher | Fixed string: SunsetDiff. |
license | https://creativecommons.org/licenses/by/4.0/ |
description | What the file contains. |
version | The newest rules[].checked date, YYYY-MM-DD. |
rules | One object per breaking change. |
rules[].id | Stable id. The hub links to /breaking-changes/#id. |
rules[].provider | Provider id. See /api/v1/providers.json. |
rules[].provider_name | Provider name shown on the site. |
rules[].model_family | Family label from the source, or null. |
rules[].models | Models this rule is shown for. Each item has id, provider, slug, and role. |
rules[].models[].role | rejects means this id fails the old setting. switch_from means a switch guide leaves this id for a model that fails it. |
rules[].old_setting | The request field, value, or endpoint the old call sent. |
rules[].what_happens | What the cited page says happens now. |
rules[].error_text | Exact sentence from source_url or quote_source_url. Null when neither page prints one. |
rules[].fix | The change the cited page tells you to make. |
rules[].source_url | Official page or public GitHub issue the row is taken from. |
rules[].source_label | Short name for that page. |
rules[].quote_source_url | Page that prints error_text, when it is not source_url. Null otherwise. |
rules[].quote_source_label | Short name for quote_source_url, or null. |
rules[].checked | Day the source was read, YYYY-MM-DD. |
rules[].error_page | SunsetDiff /errors/ path, or null when this rule has no error page. |
rules[].migrations | Switch guides this rule applies to. Each item has href and label. |
rules[].citations | Every URL read for the row, including source_url. |
rules[].scope | Optional. api_version when the rule follows an API version instead of one model id. Omitted on model-scoped rows. |
rules[].api_version | Optional. The API version string, such as 2026-10-21, when scope is api_version. Omitted on model-scoped rows. |
curl -fsSL https://sunsetdiff.com/data/breaking-changes.json const response = await fetch("https://sunsetdiff.com/data/breaking-changes.json");
const data = await response.json(); The same breaking-change rules as breaking-changes.json, one row each. License CC BY 4.0.
URL: https://sunsetdiff.com/data/breaking-changes.csv
Format: text/csv
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
id | Same meaning as the matching field in /data/breaking-changes.json. |
provider | Same meaning as the matching field in /data/breaking-changes.json. |
provider_name | Same meaning as the matching field in /data/breaking-changes.json. |
model_family | Family label from the source. Empty when the source names only specific ids and this row left the family blank. |
model_ids | Models that reject the old setting, as provider:id, separated by a semicolon. |
switch_from_model_ids | Model ids you switch away from, as provider:id, separated by a semicolon. Empty when the rule has none. |
old_setting | Same meaning as the matching field in /data/breaking-changes.json. |
what_happens | Same meaning as the matching field in /data/breaking-changes.json. |
error_text | Exact quoted sentence. Empty when the source does not print one. |
fix | Same meaning as the matching field in /data/breaking-changes.json. |
source_url | Same meaning as the matching field in /data/breaking-changes.json. |
source_label | Same meaning as the matching field in /data/breaking-changes.json. |
quote_source_url | Page that prints error_text, when it is not source_url. Empty otherwise. |
checked | Same meaning as the matching field in /data/breaking-changes.json. |
error_page | SunsetDiff /errors/ path. Empty when this rule has no error page. |
migrations | Switch guide paths, separated by a semicolon. |
citations | Source URLs separated by spaces. |
scope | api_version when the rule follows an API version. Empty on model-scoped rows. |
api_version | API version string, such as 2026-10-21. Empty on model-scoped rows. |
curl -fsSL https://sunsetdiff.com/data/breaking-changes.csv const response = await fetch("https://sunsetdiff.com/data/breaking-changes.csv");
const text = await response.text(); Providers, full model records, and migration diffs in one file. License CC BY 4.0.
URL: https://sunsetdiff.com/dataset/sunsetdiff.json
Format: application/json
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
generated_at | ISO-8601 time when this file was written. |
providers | Provider records: id, name, deprecations_url, pricing_url, models_url. |
models | Full model record. status is active, legacy, deprecated, or retired. shutdown_date_kind is exact, not_before, month_only, or none. A null date or spec means the official page did not publish it. |
migrations | Migration diffs: from, to, price_diff, context_diff, max_output_diff, capability_changes, api_changes, code_change, migration_checklist, confidence, last_checked, sources. from and to are { provider, model_id, slug }. |
migrations[].price_diff | input_pct_change, output_pct_change, example_monthly_cost_old, example_monthly_cost_new, currency (USD), example_label. Null percents mean a price was not published. |
migrations[].context_diff | old_tokens, new_tokens, change_pct. |
migrations[].max_output_diff | old_tokens, new_tokens, change_pct. |
migrations[].capability_changes | Array of { field, old, new } for capability fields that differ. |
migrations[].api_changes | Array of { kind, detail, source_url }. kind is renamed_param, removed_param, new_required_param, endpoint_change, or behavior_change. |
migrations[].code_change | language plus before/after, and snippets.python, snippets.typescript, and snippets.curl, each with before and after. |
migrations[].migration_checklist | Non-empty list of steps. |
migrations[].confidence | official or partial. |
migrations[].last_checked | YYYY-MM-DD. |
migrations[].sources | sources[]: url, label, last_checked, excerpt. last_checked is the day that page was read, YYYY-MM-DD. |
curl -fsSL https://sunsetdiff.com/dataset/sunsetdiff.json const response = await fetch("https://sunsetdiff.com/dataset/sunsetdiff.json");
const data = await response.json(); One row per model, with the shutdown date, replacement id, and source. License CC BY 4.0.
URL: https://sunsetdiff.com/dataset/sunsetdiff.csv
Format: text/csv
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
id | Same meaning as the compact JSON row in /api/v1/models.json. |
slug | Same meaning as the compact JSON row in /api/v1/models.json. |
provider | Same meaning as the compact JSON row in /api/v1/models.json. |
display_name | Same meaning as the compact JSON row in /api/v1/models.json. |
status | Same meaning as the compact JSON row in /api/v1/models.json. |
shutdown_date | Same meaning as the compact JSON row in /api/v1/models.json. |
shutdown_date_kind | Same meaning as the compact JSON row in /api/v1/models.json. |
replacement | First replacement model id, or empty. |
source_url | Same meaning as the compact JSON row in /api/v1/models.json. |
last_checked | Same meaning as the compact JSON row in /api/v1/models.json. |
curl -fsSL https://sunsetdiff.com/dataset/sunsetdiff.csv const response = await fetch("https://sunsetdiff.com/dataset/sunsetdiff.csv");
const text = await response.text(); RSS 2.0 feed of shutdown batches and recorded deprecation changes.
URL: https://sunsetdiff.com/feed.xml
Format: application/rss+xml
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
channel title | SunsetDiff new deprecations. |
channel link | The deadlines page. |
item title | A shutdown batch title, or model id plus the field that changed. |
item link | The SunsetDiff page for that batch or model. A change with no model page links to the official source. |
item guid | The page URL for a batch, or date:provider:model id:field for a change. |
item pubDate | The batch date or the change date, as an RSS date. |
item description | The batch lead, or the field's new and previous values plus the source URL. |
curl -fsSL https://sunsetdiff.com/feed.xml const response = await fetch("https://sunsetdiff.com/feed.xml");
const text = await response.text(); iCalendar of shutdowns in the next 365 days. not_before floors are left out.
URL: https://sunsetdiff.com/deadlines.ics
Format: text/calendar
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
UID | provider-slug@sunsetdiff. |
DTSTART | All-day date of shutdown_date. |
SUMMARY | Model id plus shutdown, or shutdown month when the kind is month_only. |
DESCRIPTION | Official source URL, the day it was checked, and the status. |
URL | The SunsetDiff model page. |
curl -fsSL https://sunsetdiff.com/deadlines.ics const response = await fetch("https://sunsetdiff.com/deadlines.ics");
const text = await response.text(); Counts and links to the other static files.
URL: https://sunsetdiff.com/api/v1/index.json
Format: application/json
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
version | Fixed string v1. |
generated_at | ISO-8601 time when the files were written. |
counts.models | Number of model records. |
counts.migrations | Number of migration diffs. |
counts.providers | Number of providers. |
links | Relative paths to providers, models, upcoming, changes, schema, the dataset files, deadlines.ics, and feed.xml. |
curl -fsSL https://sunsetdiff.com/api/v1/index.json const response = await fetch("https://sunsetdiff.com/api/v1/index.json");
const data = await response.json(); The provider list, including each official deprecations URL.
URL: https://sunsetdiff.com/api/v1/providers.json
Format: application/json
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
id | Stable provider id used in model records and URLs. |
name | Official page for that topic. |
deprecations_url | Official page the dates are read from. |
pricing_url | Official page for that topic. |
models_url | Official page for that topic. |
curl -fsSL https://sunsetdiff.com/api/v1/providers.json const response = await fetch("https://sunsetdiff.com/api/v1/providers.json");
const data = await response.json(); Every model as a short row: status, shutdown, replacement, and source.
URL: https://sunsetdiff.com/api/v1/models.json
Format: application/json
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
id | See the full record in /data/models.json. source_url and last_checked come from the first source. |
slug | See the full record in /data/models.json. source_url and last_checked come from the first source. |
provider | See the full record in /data/models.json. source_url and last_checked come from the first source. |
display_name | See the full record in /data/models.json. source_url and last_checked come from the first source. |
status | See the full record in /data/models.json. source_url and last_checked come from the first source. |
shutdown_date | See the full record in /data/models.json. source_url and last_checked come from the first source. |
shutdown_date_kind | See the full record in /data/models.json. source_url and last_checked come from the first source. |
replacement | First replacement model id, or null. |
source_url | See the full record in /data/models.json. source_url and last_checked come from the first source. |
last_checked | See the full record in /data/models.json. source_url and last_checked come from the first source. |
curl -fsSL https://sunsetdiff.com/api/v1/models.json const response = await fetch("https://sunsetdiff.com/api/v1/models.json");
const data = await response.json(); Compact rows whose shutdown date falls in the next 90 days, soonest first.
URL: https://sunsetdiff.com/api/v1/upcoming.json
Format: application/json
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
id | Same fields as /api/v1/models.json. |
slug | Same fields as /api/v1/models.json. |
provider | Same fields as /api/v1/models.json. |
display_name | Same fields as /api/v1/models.json. |
status | Same fields as /api/v1/models.json. |
shutdown_date | Same fields as /api/v1/models.json. |
shutdown_date_kind | Same fields as /api/v1/models.json. |
replacement | Same fields as /api/v1/models.json. |
source_url | Same fields as /api/v1/models.json. |
last_checked | Same fields as /api/v1/models.json. |
curl -fsSL https://sunsetdiff.com/api/v1/upcoming.json const response = await fetch("https://sunsetdiff.com/api/v1/upcoming.json");
const data = await response.json(); The last 500 recorded field changes.
URL: https://sunsetdiff.com/api/v1/changes.json
Format: application/json
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
date | See the changelog for the same facts grouped by date. |
provider | See the changelog for the same facts grouped by date. |
model_id | See the changelog for the same facts grouped by date. |
field | See the changelog for the same facts grouped by date. |
old | The value before or after the change. Shape depends on the field. |
new | The value before or after the change. Shape depends on the field. |
source_url | See the changelog for the same facts grouped by date. |
curl -fsSL https://sunsetdiff.com/api/v1/changes.json const response = await fetch("https://sunsetdiff.com/api/v1/changes.json");
const data = await response.json(); JSON Schema for a model, a provider, and a migration.
URL: https://sunsetdiff.com/api/v1/schema.json
Format: application/json
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
model | JSON Schema for one model record. |
provider | JSON Schema for one provider. |
migration | JSON Schema for one migration diff. |
curl -fsSL https://sunsetdiff.com/api/v1/schema.json const response = await fetch("https://sunsetdiff.com/api/v1/schema.json");
const data = await response.json(); The full model record for that provider and slug.
URL: https://sunsetdiff.com/api/v1/models/<provider>/<slug>.json
Format: application/json
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
id | Full model record field. See /data/models.json. |
slug | Full model record field. See /data/models.json. |
provider | Full model record field. See /data/models.json. |
display_name | Full model record field. See /data/models.json. |
family | Full model record field. See /data/models.json. |
status | Full model record field. See /data/models.json. |
announced_date | Full model record field. See /data/models.json. |
deprecation_date | Full model record field. See /data/models.json. |
shutdown_date | Full model record field. See /data/models.json. |
shutdown_date_kind | Full model record field. See /data/models.json. |
region_or_platform_notes | Full model record field. See /data/models.json. |
replacements | Full model record field. See /data/models.json. |
sources | Full model record field. See /data/models.json. |
specs | Full model record field. See /data/models.json. |
first_seen | Full model record field. See /data/models.json. |
updated_at | Full model record field. See /data/models.json. |
curl -fsSL https://sunsetdiff.com/api/v1/models/<provider>/<slug>.json const response = await fetch("https://sunsetdiff.com/api/v1/models/<provider>/<slug>.json");
const data = await response.json(); The model record for that id. If several providers use the same id, the file is an array of records.
URL: https://sunsetdiff.com/api/v1/lookup/<model-id>.json
Format: application/json
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
(model or array) | One model record, or an array of model records that share the id. |
curl -fsSL https://sunsetdiff.com/api/v1/lookup/<model-id>.json const response = await fetch("https://sunsetdiff.com/api/v1/lookup/<model-id>.json");
const data = await response.json(); The price, context, capability, API, and code diff for one replacement pair.
URL: https://sunsetdiff.com/api/v1/migrations/<from-provider>__<from-slug>__to__<to-provider>__<to-slug>.json
Format: application/json
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
from | See /dataset/sunsetdiff.json migrations. |
to | See /dataset/sunsetdiff.json migrations. |
price_diff | See /dataset/sunsetdiff.json migrations. |
context_diff | See /dataset/sunsetdiff.json migrations. |
max_output_diff | See /dataset/sunsetdiff.json migrations. |
capability_changes | See /dataset/sunsetdiff.json migrations. |
api_changes | See /dataset/sunsetdiff.json migrations. |
code_change | See /dataset/sunsetdiff.json migrations. |
migration_checklist | See /dataset/sunsetdiff.json migrations. |
confidence | See /dataset/sunsetdiff.json migrations. |
last_checked | See /dataset/sunsetdiff.json migrations. |
sources | See /dataset/sunsetdiff.json migrations. |
curl -fsSL https://sunsetdiff.com/api/v1/migrations/<from-provider>__<from-slug>__to__<to-provider>__<to-slug>.json const response = await fetch("https://sunsetdiff.com/api/v1/migrations/<from-provider>__<from-slug>__to__<to-provider>__<to-slug>.json");
const data = await response.json(); iCalendar of every model with a shutdown date, including not_before floors.
URL: https://sunsetdiff.com/calendar.ics
Format: text/calendar
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
SUMMARY | Model id plus shutdown, or 'not before this date' when the kind is not_before. |
DESCRIPTION | The official source URL. |
URL | The SunsetDiff model page. |
curl -fsSL https://sunsetdiff.com/calendar.ics const response = await fetch("https://sunsetdiff.com/calendar.ics");
const text = await response.text(); The latest 100 recorded field changes, newest first.
URL: https://sunsetdiff.com/changes.xml
Format: application/rss+xml
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
item title | provider, model id, and field. |
item link | The official source URL for that change. |
item description | field, previous value, and new value. |
curl -fsSL https://sunsetdiff.com/changes.xml const response = await fetch("https://sunsetdiff.com/changes.xml");
const text = await response.text(); A short index of SunsetDiff pages, the dataset links, and the soonest shutdowns.
URL: https://sunsetdiff.com/llms.txt
Format: text/plain
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
text | Markdown-style links. Publisher line says SunsetDiff. |
curl -fsSL https://sunsetdiff.com/llms.txt const response = await fetch("https://sunsetdiff.com/llms.txt");
const text = await response.text(); Short rows the on-site search box uses.
URL: https://sunsetdiff.com/search-index.json
Format: application/json
License: CC BY 4.0 for the JSON and CSV dataset files under /dataset, /data, and /api/v1.
| Field | Meaning |
|---|---|
id | Model id. |
provider | Provider id. |
slug | URL slug. |
display_name | Display name. |
status | active, legacy, deprecated, or retired. |
curl -fsSL https://sunsetdiff.com/search-index.json const response = await fetch("https://sunsetdiff.com/search-index.json");
const data = await response.json(); SunsetDiff tracks them at sunsetdiff.com. Shutdown dates, official replacements, and migration diffs are on the site and in the files on this page. Publisher: SunsetDiff. The dataset is CC BY 4.0.
Yes. These are static files and they need no API key. upcoming.json lists shutdowns in the next 90 days. models.json is the full model record list. sunsetdiff.json adds providers and migration diffs.
Yes. The free streamable HTTP server is at https://sunsetdiff-api.onrender.com/mcp. It needs no API key. Tools and client setup are on the MCP page. The registry manifest is server.json.
A GitHub Action checks the official provider pages about every 6 hours. The next site build rewrites these files when the data changes. Each source has a last_checked date.
In breaking-changes.json and breaking-changes.csv. The human page is Breaking changes. error_text is empty when the cited page does not print a sentence. License CC BY 4.0.
CC BY 4.0. Credit SunsetDiff and link the license. That license covers the JSON and CSV files under /dataset and /api/v1, and the data files that feed them. breaking-changes.json is the request-setting list.