Skip to content

GET /v1/projects/{id}/eol

EOL subscriptions let you monitor the end-of-life and end-of-support dates for specific software versions. Each subscription is tied to a project.

GET /api/v1/projects/{project_id}/eol
Authorization: Bearer twa_your_key_here
ParameterTypeDescription
project_idUUIDProject identifier
[
{
"id": "018eaaaa-0000-7000-8000-000000000040",
"product_id": "nodejs",
"cycle": "18",
"notify_before_eol_days": 90,
"notify_before_support_days": 30,
"created_at": "2024-05-10T12:00:00Z"
},
{
"id": "018eaaaa-0000-7000-8000-000000000041",
"product_id": "ubuntu",
"cycle": "22.04",
"notify_before_eol_days": null,
"notify_before_support_days": null,
"created_at": "2024-05-10T12:05:00Z"
},
{
"id": "018eaaaa-0000-7000-8000-000000000042",
"product_id": "postgresql",
"cycle": null,
"notify_before_eol_days": null,
"notify_before_support_days": null,
"created_at": "2024-06-01T09:00:00Z"
}
]
FieldTypeDescription
idstring (UUID)Subscription identifier
product_idstringProduct identifier (e.g. nodejs, ubuntu, postgresql) — matches IDs from the EOL catalog
cyclestring | nullSpecific monitored version (e.g. "18", "22.04"). null = whole product subscription (new releases)
notify_before_eol_daysinteger | nullDays before EOL to notify. null = uses the project’s default setting
notify_before_support_daysinteger | nullDays before end-of-support to notify. null = uses the project’s default setting
created_atstring (ISO 8601)Subscription creation date
cycleTypeBehaviour
nullProduct subscriptionAlert when a new version/cycle is published for this product
"18", "22.04", etc.Cycle subscriptionAlert before the end-of-life or end-of-support of this specific version
CodeDetailCause
404Projet introuvableproject_id does not exist
403Accès refusé à ce projetProject not accessible

List versions approaching end-of-life (≤ 90 days)

import httpx
from datetime import date, timedelta
BASE = "https://app.techwatchalert.com/api/v1"
headers = {"Authorization": "Bearer twa_your_key_here"}
project_id = "018e1234-abcd-7000-8000-000000000010"
subs = httpx.get(f"{BASE}/projects/{project_id}/eol", headers=headers).json()
today = date.today()
soon = today + timedelta(days=90)
for sub in subs:
if sub["cycle"] is None:
continue
cycles = httpx.get(
f"{BASE}/eol/products/{sub['product_id']}/cycles",
headers=headers,
).json()["cycles"]
for c in cycles:
if c["cycle"] != sub["cycle"]:
continue
eol = c.get("eol")
if isinstance(eol, str):
eol_date = date.fromisoformat(eol)
if today <= eol_date <= soon:
days_left = (eol_date - today).days
print(f"{sub['product_id']} {c['cycle']} — EOL in {days_left} days ({eol_date})")