Lifecycle API
Query normalized lifecycle assertions across providers, models, and deployments, then poll source-change events to trigger re-evaluation.
List lifecycle records
GET
/v1/lifecycleAuthentication: OptionalcURL · upcoming deployment EOL
curl "https://api.use-allm.com/v1/lifecycle?resource_type=deployment&end_of_life_before=2026-11-01&include_unknown=false&sort=end_of_life&order=asc" -H "Authorization: Bearer $ALLM_API_KEY"JSON · 200
{
"data": [
{
"resource_type": "deployment",
"resource_id": "dep_anthropic_claude_haiku_4_5_messages_global",
"provider_id": "anthropic",
"model_id": "anthropic/claude-haiku-4.5",
"lifecycle": {
"status": "available",
"announced_at": null,
"deprecation": {
"state": "not_announced",
"date": null,
"precision": "unknown",
"date_type": "unknown",
"evidence": [
{
"source_url": "https://platform.claude.com/docs/en/about-claude/model-deprecations",
"source_type": "official_lifecycle",
"observed_at": "2026-07-16T00:00:00Z",
"verification_status": "official_declared"
}
]
},
"end_of_life": {
"state": "scheduled",
"date": "2026-10-15",
"precision": "day",
"date_type": "not_before",
"evidence": [
{
"source_url": "https://platform.claude.com/docs/en/about-claude/model-deprecations",
"source_type": "official_lifecycle",
"observed_at": "2026-07-16T00:00:00Z",
"verification_status": "official_declared"
}
]
},
"replacement_ids": [],
"coverage": {
"status": "monitored",
"last_checked_at": "2026-07-16T08:12:04Z",
"source_count": 1,
"source_ids": ["20000000-0000-0000-0000-000000000002"]
},
"last_changed_at": "2026-07-16T00:00:00Z"
}
}
],
"meta": { "total": 1, "limit": 100, "offset": 0, "has_more": false }
}Query parameters
resource_typeenum
provider, model, or deployment.resource_idstring
Exact stable ALLM resource ID.
providerstring
Exact provider slug for provider and deployment records.
modelstring
Exact canonical model ID for model and deployment records.
statusenum
preview, available, legacy, deprecated, retired, or unknown.deprecation_stateenum
Exact deprecation milestone state.
end_of_life_stateenum
Exact end-of-life milestone state.
coverage_statusenum
Exact monitoring coverage status.
include_unknownboolean
Set false to omit records whose status and both milestones are all unknown.Default:
truedeprecation_before / deprecation_afterISO 8601
Keep records whose known deprecation date is on or within the requested boundary.
end_of_life_before / end_of_life_afterISO 8601
Keep records whose known EOL date is on or within the requested boundary.
sortenum
end_of_life, deprecation, or last_changed.Default: end_of_lifeorderenum
asc or desc.Default: asclimitinteger
Maximum number of records to return (1–500).Default:
100offsetinteger
Zero-based number of matching records to skip.Default:
0Date filters omit unknown dates
A date boundary matches only records with a parseable date. Run a separate query for
end_of_life_state=unknown so that unannounced risk does not disappear from your inventory.Lifecycle object
statusenumrequired
Current normalized status for this exact resource scope.
announced_atISO 8601 | nullrequired
When the lifecycle change was announced, when known.
deprecationLifecycleMilestonerequired
Deprecation state, date semantics, and evidence.
end_of_lifeLifecycleMilestonerequired
Retirement or shutdown state, date semantics, and evidence.
replacement_idsstring[]required
Provider-declared replacements when normalized. Empty does not mean no migration target exists.
coverageLifecycleCoveragerequired
Source-monitoring status, last check, and monitored source IDs.
last_changed_atISO 8601 | nullrequired
Most recent known change to the normalized assertion.
Provider and model records can also include summary, with deployment counts, known and unknown milestone counts, and the next confirmed scheduled EOL date. A summary is aggregation, not a lifecycle assertion at the parent scope.
Source events
GET
/v1/lifecycle/eventsAuthentication: OptionalcURL
curl "https://api.use-allm.com/v1/lifecycle/events?since=2026-07-16T00:00:00Z&provider=openai&limit=100" -H "Authorization: Bearer $ALLM_API_KEY"providerstring
Exact provider slug.
source_iduuid
Exact monitored source identifier.
event_typeenum
lifecycle.source_changed, lifecycle.source_recovered, or lifecycle.source_failed.since / untilISO 8601
Inclusive detection-time boundaries.
limitinteger
Maximum number of records to return (1–500).Default:
100offsetinteger
Zero-based number of matching records to skip.Default:
0JSON · source event
{
"id": "evt_01JZZ8KNR7C1XW6Q3W9B6M9Y6S",
"event_type": "lifecycle.source_changed",
"provider_id": "openai",
"source_id": "20000000-0000-0000-0000-000000000001",
"source_url": "https://developers.openai.com/api/docs/deprecations",
"detected_at": "2026-07-16T08:12:04Z",
"previous_sha256": "a830…9ee2",
"current_sha256": "b94d…12a0"
}A source change is a re-check signal
A changed content hash means the upstream page or API changed. It does not prove that an EOL date changed. Fetch the latest lifecycle record and compare its catalog release and evidence before acting.
Recommended monitoring loop
- Inventory production deployment IDs and query their lifecycle records on every catalog release.
- Poll
/v1/lifecycle/eventswith the last successfully processeddetected_at. - On a source change or recovery, re-fetch affected records; on source failure, raise a coverage warning.
- Alert separately for scheduled confirmed EOL, boundary or estimated dates, deprecated status, and unknown or stale coverage.
- Keep a migration buffer and a tested replacement. Never wait until the provider's final date.