endoflife.ai Status API
The Status API from endoflife.ai — 1 operation(s) for status.
The Status API from endoflife.ai — 1 operation(s) for status.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/endoflife-ai:endoflife-ai-status-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Endoflife Ai Status API
version: 1.4.0
contact:
email: partners@endoflife.ai
url: https://endoflife.ai/api
description: 'Operations tagged Status across 2 of this provider''s published API definitions: openapi.json, endoflife-ai-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.endoflife.ai
security:
- {}
- ApiKeyAuth: []
- BearerAuth: []
tags:
- name: Status
paths:
/v1/status/{slug}/{version}:
get:
summary: Lifecycle status for a specific version
parameters:
- name: slug
in: path
required: true
schema:
type: string
- name: version
in: path
required: true
schema:
type: string
responses:
'200':
description: Status object, including the product's verified CPE 2.3 identifier(s) where one exists
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
X-EOL-Key-Status:
$ref: '#/components/headers/X-EOL-Key-Status'
content:
application/json:
schema:
$ref: '#/components/schemas/Status'
'401':
description: No valid X-API-Key, from 2026-11-16T00:00:00Z (keyless access ends then). The body says how to get a free key (https://endoflife.ai/api#free-key); X-EOL-Key-Status names why a sent key was not honoured.
headers:
X-EOL-Key-Status:
$ref: '#/components/headers/X-EOL-Key-Status'
WWW-Authenticate:
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unknown product or version
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Daily quota exhausted for this tier (anonymous per IP, keyed per key). Retry-After says when the counter resets (next UTC midnight).
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
X-EOL-Key-Status:
$ref: '#/components/headers/X-EOL-Key-Status'
Retry-After:
schema:
type: integer
description: Seconds until the daily counter resets
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Status
operationId: getV1StatusBySlugByVersion
x-operation-id-source: derived
servers:
- url: https://api.endoflife.ai
components:
schemas:
Status:
type: object
description: 'Answer of /v1/status/{slug}/{version}: the lifecycle verdict without the score.'
properties:
alias_of:
type: string
description: 'Only when the slug sent is an alias of a tracked product: the slug as sent; product is the tracked slug it resolved to.'
requested_version:
type: string
description: Only when the version was resolved to its release line.
version_matched_by:
type: string
enum:
- release-line
- model-name
description: 'Only when the version was not matched exactly: release-line or model-name (a device model sent without its family prefix).'
product:
type: string
version:
type: string
status:
type: string
enum:
- active
- warn
- eol
- unknown
description: warn = within 180 days of end of life, still supported
is_eol:
type: boolean
is_supported:
type: boolean
description: true for status active or warn (fixes still ship today); false for eol and unknown. Until API 1.1.0 this was false in the warn window.
eol_approaching:
type: boolean
description: status is warn
eol_date:
type:
- string
- 'null'
format: date
days_until_eol:
type:
- integer
- 'null'
days_past_eol:
type:
- integer
- 'null'
eol_date_precision:
type:
- string
- 'null'
enum:
- day
- month
- quarter
- null
description: 'How precisely the vendor publishes eol_date: day = the vendor names the day; month or quarter = the vendor names only the month (quarter), so eol_date is that period''s LAST day, kept for sorting and comparison; display the period ("October 2026"), not the day. null when eol_date is null.'
date_precision_note:
type: string
description: Present only when eol_date is month or quarter precision.
latest_release:
type:
- string
- 'null'
cpe:
type:
- array
- 'null'
items:
type: string
description: For a hardware product whose versions are models (cpe_scope model), only the identifiers that name this model.
cpe_scope:
type: string
enum:
- model
description: Present for hardware products whose versions are models.
cpe_note:
type: string
description: Present when cpe_scope is model and no NIST CPE names this model, so cpe is null.
purl:
type:
- array
- 'null'
items:
type: string
eol_date_source:
type:
- string
- 'null'
eol_date_source_url:
type:
- string
- 'null'
eol_date_verified_at:
type:
- string
- 'null'
format: date
eol_date_status:
type:
- string
- 'null'
eol_date_agreement:
type:
- integer
- 'null'
eol_date_confidence:
type:
- string
- 'null'
score_url:
type: string
format: uri
description: The score card page, cycle written as the site writes it (see Score.score_card_url).
keyless_access_notice:
type: object
description: 'Only on answers to anonymous calls before 2026-11-16T00:00:00Z: message, keyless_access_ends (ISO date-time), get_free_key (URL). From then such calls are 401.'
properties:
message:
type: string
keyless_access_ends:
type: string
format: date-time
get_free_key:
type: string
format: uri
Error:
type: object
description: 'Every error carries error and docs. Some add detail: reason, candidates (sibling cycles of a split line), cycle and last_published (a version above an ended line''s last patch), did_you_mean (closest tracked slugs), not_tracked, see_products, tracked_products, upgrade, get_free_key, key_status, limit_bytes.'
properties:
error:
type: string
docs:
type: string
additionalProperties: true
headers:
X-RateLimit-Remaining:
schema:
type: integer
description: Requests left today after this one. Absent on a Pro key.
X-EOL-Key-Status:
schema:
type: string
enum:
- unknown
- inactive
description: 'Present only when an X-API-Key was sent and not honoured: unknown (no such key), inactive (subscription cancelled or refunded). Until 2026-11-16 the request was answered as anonymous; from then it is refused with 401. Free keys do not expire.'
X-RateLimit-Reset:
schema:
type: integer
description: 'Unix time (seconds) when the daily counter resets: the next UTC midnight. Absent on a Pro key.'
X-RateLimit-Limit:
schema:
type: string
description: Requests allowed per UTC day for the caller's tier (anonymous per IP; keyed per key), or the word unlimited on a Pro key.
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-API-Key
BearerAuth:
type: http
scheme: bearer
description: 'The same API key sent as Authorization: Bearer <key>, for clients that cannot set X-API-Key (Prometheus before 3.0).'
x-refined-from:
- openapi.json
- endoflife-ai-openapi.json