API
JSON API
No key, no signup, no rate limit. Static JSON on a CDN, rebuilt daily. CORS is open, so you can call it from a browser.
Endpoints
GET
/api/v1/products.jsonAll 464 products with support counts and the next branch to expire. Roughly 200 KB.
curl https://end-of-life.org/api/v1/products.json
GET
/api/v1/products/{name}.json
One product, every branch, all four lifecycle dates, plus cvesMissedSinceEol where
we have vulnerability analysis.
curl https://end-of-life.org/api/v1/products/php.json
Fields worth reading twice
eolFrom,eoasFrom,eoesFrom-
Active support ends, standard support ends, extended support ends. Not every product has all
three. Many vendors only publish one. Absent means the vendor doesn't define that phase, and
the field is
nullrather than a guess. - Date format
-
Either
YYYY-MM-DDorYYYY-MM. The second form means the vendor announced a month without a day, and we didn't invent one. Check the length before parsing. cvesMissedSinceEol-
Vulnerabilities published after that branch reached end of life, from NVD. Available for
13 products where fixes genuinely don't reach the old branch. It's
nulleverywhere else. Note thatnulland0mean different things. selfSourcedandsources- Whether we parsed the vendor's own release data for this product, and which URLs we read. Everything else derives from the upstream dataset described on the data sources page.
Stability
Fields get added; existing ones don't change meaning or disappear. A breaking change would ship
as /api/v2/. Responses carry generated_at so you can tell how fresh a
cached copy is.
Cache your responses. The data changes once a day, at most. Terms are on the terms page; short version, use it freely.