{
  "name": "endoflife.ai API",
  "version": "1.1.0",
  "description": "EOL dates and EOL Risk Scores™ for 500+ software products.",
  "endpoints": {
    "products": "GET /v1/products",
    "product": "GET /v1/product/:slug",
    "score": "GET /v1/score/:slug",
    "scoreVersion": "GET /v1/score/:slug/:version",
    "status": "GET /v1/status/:slug/:version",
    "batch": "POST /v1/batch",
    "sbom": "POST /v1/sbom  (CycloneDX or SPDX JSON; ?enrich=1 returns the document annotated)",
    "sbomWatch": "POST /v1/sbom/watch  (body: {\"email\", \"sbom\"} — alert on the document's lines)",
    "alerts": "POST /v1/alerts/subscribe  (body: {\"email\", \"products\": [\"slug:version\"]})",
    "metrics": "GET /v1/metrics?stack=slug:version,slug:version  (or ?slug=product)",
    "badge": "GET /v1/badge/:slug/:version  (shields.io endpoint badge)",
    "freeKey": "POST /v1/keys/free  (body: {\"email\": \"you@example.com\"} — free API key, emailed)",
    "openapi": "GET /openapi.json"
  },
  "tiers": {
    "anonymous": "50 requests/day per IP, batch of 3",
    "free_key": "150 requests/day for 30 days, batch of 5 — free evaluation key, instant via POST /v1/keys/free",
    "starter": "$89/mo — 10,000 requests/day, batch of 25",
    "pro": "$199/mo — unlimited requests, batch of 50"
  },
  "rate_limit_headers": "Every answer carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (unix seconds, next UTC midnight); a 429 adds Retry-After; a key that was sent but not honoured is named in X-EOL-Key-Status.",
  "docs": "https://endoflife.ai/api",
  "methodology": "https://endoflife.ai/risk-score",
  "tier": "anon",
  "rate_limit": "50 requests/day"
}