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: Optional
cURL · 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_type
enum
provider, model, or deployment.
resource_id
string
Exact stable ALLM resource ID.
provider
string
Exact provider slug for provider and deployment records.
model
string
Exact canonical model ID for model and deployment records.
status
enum
preview, available, legacy, deprecated, retired, or unknown.
deprecation_state
enum
Exact deprecation milestone state.
end_of_life_state
enum
Exact end-of-life milestone state.
coverage_status
enum
Exact monitoring coverage status.
include_unknown
boolean
Set false to omit records whose status and both milestones are all unknown.Default: true
deprecation_before / deprecation_after
ISO 8601
Keep records whose known deprecation date is on or within the requested boundary.
end_of_life_before / end_of_life_after
ISO 8601
Keep records whose known EOL date is on or within the requested boundary.
sort
enum
end_of_life, deprecation, or last_changed.Default: end_of_life
order
enum
asc or desc.Default: asc
limit
integer
Maximum number of records to return (1–500).Default: 100
offset
integer
Zero-based number of matching records to skip.Default: 0

Date 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

status
enumrequired
Current normalized status for this exact resource scope.
announced_at
ISO 8601 | nullrequired
When the lifecycle change was announced, when known.
deprecation
LifecycleMilestonerequired
Deprecation state, date semantics, and evidence.
end_of_life
LifecycleMilestonerequired
Retirement or shutdown state, date semantics, and evidence.
replacement_ids
string[]required
Provider-declared replacements when normalized. Empty does not mean no migration target exists.
coverage
LifecycleCoveragerequired
Source-monitoring status, last check, and monitored source IDs.
last_changed_at
ISO 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: Optional
cURL
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"
provider
string
Exact provider slug.
source_id
uuid
Exact monitored source identifier.
event_type
enum
lifecycle.source_changed, lifecycle.source_recovered, or lifecycle.source_failed.
since / until
ISO 8601
Inclusive detection-time boundaries.
limit
integer
Maximum number of records to return (1–500).Default: 100
offset
integer
Zero-based number of matching records to skip.Default: 0
JSON · 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

  1. Inventory production deployment IDs and query their lifecycle records on every catalog release.
  2. Poll /v1/lifecycle/events with the last successfully processed detected_at.
  3. On a source change or recovery, re-fetch affected records; on source failure, raise a coverage warning.
  4. Alert separately for scheduled confirmed EOL, boundary or estimated dates, deprecated status, and unknown or stale coverage.
  5. Keep a migration buffer and a tested replacement. Never wait until the provider's final date.