CYBERSECURITYTRACKER
TRACKING3,014 stories541 vuln stories
Developers

JSON API

The site is built from static JSON shards, and those shards are the API. They are read-only, versioned by path, and served with Cross-Origin Resource Sharing (CORS) enabled so you can fetch them from anywhere.

Endpoints

PathReturns
/data/index.jsonAvailable day and month shard keys.
/data/days/YYYY-MM-DD.jsonAll items for one day (hot window, last 90 days).
/data/months/YYYY-MM.jsonArchived items for one month.
/data/rollups/YYYY-MM.jsonMonthly rollup: top clusters, KEV additions, leaderboard, and stat deltas.
/data/rollups/index.jsonAvailable rollup months.
/data/vulns_index.jsonEvery tracked CVE, sorted by priority tier (tier-major, then within-tier score) — the lean table index: id, vendor, product, CVSS, EPSS, KEV flags, exploitation status, mentions, priority tier and score, exposure, and dates. Detail fields (so_what, the priority breakdown, evidence, SSVC, references, ATT&CK techniques, and so on) live in the per-CVE shards below.
/data/vulns/{n}.jsonPer-CVE detail shards (250 CVEs each): the FULL record for every CVE. Locate a CVE's shard with /data/vulns/shardmap.json (cve_id -> shard number); /data/vulns/manifest.json gives the shard count and size for bulk reassembly. A single-file bulk export of every CVE with all fields is moving to an R2 public bucket; until then, reassemble from the shards.
/data/exploits.jsonExploit-DB entries (metadata and Exploit-DB links only), each with its referenced CVEs. Capped at the most recent by publish date; total and shown report the full and shipped counts.
/data/ics_advisories.jsonCISA ICS (OT) advisories from CISA's CSAF documents: authoritative CVSS, CWE, affected vendors and products, critical infrastructure sectors, mitigations, and the CVEs each advisory names. max_cvss is null (never 0) when unscored.
/data/cloud_vulns.jsonOpen Cloud Vulnerability Database (OCVDB) cloud vulnerabilities, a distinct entity keyed on slug and tracked separately from the CVE table: affected platforms and services, a derived remediation posture, severity, and any CVEs each entry names (usually none). Severity and absent fields are null (never 0). CC BY 4.0.
/data/malicious_packages_index.jsonOpenSSF Malicious Packages (open-source supply-chain compromises) in OSV format, keyed on the MAL id and tracked separately from the CVE table (a malicious package has no CVE identity) — the lean index: MAL id, ecosystem, package name, dates, a joined-story flag, a reference count, and the detail shard number. Only NOTABLE records are listed; the bulk auto-detections are counted honestly in bulk_total. Metadata and links only; package payloads are never mirrored. Apache-2.0.
/data/malicious_packages/{n}.jsonPer-record malicious-package detail shards (records array): the FULL record for every notable package (malicious versions, summary, CWEs, finder credit, references, and a joined story link where present). Each index row carries its shard number; /data/malicious_packages/manifest.json gives the shard count and size. Metadata and links only.
/data/lifecycle.jsonendoflife.date product lifecycle for crosswalk-mapped products only (an unmapped product is absent, so it carries no lifecycle claim): per release cycle the release date, End of Support (support ends, patches usually continue) and End of Life (patches stop) dates kept distinct, extended support, and a derived per-cycle status. A boolean or absent date is null and yields an "unknown" status, never a guess. Includes a vendor coverage ratio over the vulnerability corpus and the honest coverage limitation. MIT, endoflife.date.
/data/breaches_index.jsonConfirmed breaches and labeled leak-site claims — the lean index: kind, org, source, sector, country, claiming group, dates, and individuals_affected, plus the honest source-composition headline and the government-source reconciliation note. individuals_affected is present only when a source reported a count; when the index-level index_carries_affected flag is true, an absent value on a row means the source did not report one, never zero. A RansomLook claim may carry delisted_at, the date it was confirmed no longer listed on the leak site. That is an observation only, never a confirmation of payment, negotiation, or resolution, and it is present only on claims that have been delisted. Each row's heavy detail is in its shard.
/data/breaches/{n}.jsonPer-breach detail shards (records array): the FULL entry for every breach (description or one-line SEC filing summary, the government metadata grid, cross-source reconciliation, the SEC filing history). Each index row carries its shard number; /data/breaches/manifest.json gives the shard count and size.
/data/stats.jsonMonthly ransomware claim counts by group and sector, item volume, and KEV additions.
/data/calendar.jsonCompliance calendar entries (includes upcoming CISA directive deadlines).
/data/directives.jsonCurated CISA Binding Operational and Emergency Directives, with status, compliance deadlines, and named CVEs.
/data/attack_navigator_layer_v4_5.jsonATT&CK Navigator layer (layer format 4.5): per-technique heat scored by the count of distinct CVEs with an exploitation mapping in the MITRE Engenuity Center for Threat-Informed Defense (CTID) Known Exploited Vulnerabilities (KEV) mappings snapshot. Import it into the ATT&CK Navigator. The scores are a floor (most known-exploited CVEs carry no technique mapping); the sample basis travels in the layer's own metadata. Absent (404) until the CTID mappings are ingested; the filename carries the layer format version, so a future format bump is a new path.
/data/sigma_pack.jsonDownloadable Sigma detection rule pack: the rules referenced by the tracker's ATT&CK technique index (the techniques the tracked CVE corpus maps to, not the full SigmaHQ corpus), each with its verbatim rule YAML, author attribution, and back-link, under the embedded Detection Rule License 1.1 notice. The attribution, the link, and the licence notice must travel with the rules if you redistribute them. Absent (404) until Sigma rules are ingested.
/data/misp/manifest.jsonStatic MISP feed (manifest plus one event JSON per month plus hashes.csv, the layout a MISP instance consumes directly: point a feed at this manifest URL with source format MISP). One event per month of CISA Known Exploited Vulnerabilities catalog additions, carrying the CVE id, the date CISA added it, the KEV known-ransomware-campaign-use flag, and the tracker's own priority tier in the attribute comment. United States government public-domain facts plus the tracker's own computation only; commercially licensed corroborator-only rows are excluded. Absent (404) until CISA KEV rows are ingested.
/data/meta.jsonTaxonomy, personas, vendor feed list, last-updated.
/rss/vendor/{slug}.xmlPer-vendor RSS feed, top 200 vendors. Slugs come from meta.json.
/rss/exploits.xmlExploit-DB entries feed: recent public exploit and PoC metadata, linking out to Exploit-DB.
/rss/custom?cats=…&vendors=…Merged RSS built from any mix of categories and vendor slugs.
POST /mcpA Model Context Protocol (MCP) server (protocol revision 2025-06-18) over this same public data, so an artificial intelligence assistant can query it directly. It is a stateless, read-only JSON-RPC (JavaScript Object Notation Remote Procedure Call) endpoint: send a POST with an Accept of application/json. Tools are search_vulnerabilities, get_vulnerability, list_recent_breaches, and get_corpus_insights. It reads only these public shards, never any operator page. See the Model Context Protocol section below.

Examples

Every data endpoint below is a plain HTTPS GET. The examples cover curl, Python with requests, and PowerShell. The one exception is the Model Context Protocol server, which is a POST; it has its own section below.

A day of stories

index.json lists the available day keys; each day shard carries every item published that day.

curl
curl -s https://cybersecuritytracker.ai/data/days/2026-07-26.json | jq '.items[0] | {title, url, category}'
Python
import requests

day = requests.get("https://cybersecuritytracker.ai/data/days/2026-07-26.json", timeout=30).json()
for item in day["items"][:5]:
    print(item["title"], "->", item["url"])
PowerShell
$day = Invoke-RestMethod "https://cybersecuritytracker.ai/data/days/2026-07-26.json"
$day.items | Select-Object -First 5 title, url

Tracked vulnerabilities

The lean index carries the table columns (cvss_score, cvss_version, epss_score, kev, exploitation_status, mover_reasons, priority_tier, priority_score, ...). Detail fields (so_what, epss_delta_7d, the priority breakdown, evidence, SSVC) are in the per-CVE shards under /data/vulns/; fetch a CVE's shard via /data/vulns/shardmap.json.

curl
curl -s https://cybersecuritytracker.ai/data/vulns_index.json | jq '[.vulns[] | select(.kev)] | length'
Python
import requests

vulns = requests.get("https://cybersecuritytracker.ai/data/vulns_index.json", timeout=30).json()["vulns"]
movers = [v for v in vulns if v.get("mover_reasons")]
for v in movers[:5]:
    print(v["cve_id"], v["cvss_score"], v["mover_reasons"])
PowerShell
$vulns = (Invoke-RestMethod "https://cybersecuritytracker.ai/data/vulns_index.json").vulns
$vulns | Where-Object { $_.kev } | Select-Object -First 5 cve_id, vendor, cvss_score

Breaches and claims

breaches_index.json is the lean index (kind, org, source, sector, dates, and individuals_affected); each row's detail (description or filing summary, the government metadata grid, cross-source reconciliation, the SEC filing history) is in its shard under /data/breaches/. individuals_affected is present only when a source reported a count; when the index-level index_carries_affected flag is true, an absent value on a row means the source did not report one, never zero. Confirmed breaches carry sources. Leak-site claims are labeled Claimed by [group]. Unverified, and their descriptions are neutralized summaries, never gang copy.

curl
curl -s https://cybersecuritytracker.ai/data/breaches_index.json | jq '.breaches[] | select(.kind == "confirmed") | .org_name' | head
Python
import requests

breaches = requests.get("https://cybersecuritytracker.ai/data/breaches_index.json", timeout=30).json()["breaches"]
claims = [b for b in breaches if b["kind"] == "claim"]
print(len(claims), "unverified claims")
PowerShell
$b = (Invoke-RestMethod "https://cybersecuritytracker.ai/data/breaches_index.json").breaches
$b | Group-Object kind | Select-Object Name, Count

Ransomware statistics

Monthly ransomware claim counts by group and sector, 30-day item volume, and KEV additions by month.

curl
curl -s https://cybersecuritytracker.ai/data/stats.json | jq '.ransomware_by_group[:5]'
Python
import requests

stats = requests.get("https://cybersecuritytracker.ai/data/stats.json", timeout=30).json()
for row in stats["ransomware_by_group"][:5]:
    print(row["month"], row["group_name"], row["n"])
PowerShell
(Invoke-RestMethod "https://cybersecuritytracker.ai/data/stats.json").ransomware_by_group |
  Select-Object -First 5 month, group_name, n

Metadata and taxonomy

Categories, personas, the vendor feed list, and the last pipeline run timestamp. Use vendor_feeds to discover valid vendor slugs.

curl
curl -s https://cybersecuritytracker.ai/data/meta.json | jq '.vendor_feeds[:5]'
Python
import requests

meta = requests.get("https://cybersecuritytracker.ai/data/meta.json", timeout=30).json()
slugs = [v["slug"] for v in meta["vendor_feeds"]]
print(len(slugs), "vendor feeds, e.g.", slugs[:3])
PowerShell
$meta = Invoke-RestMethod "https://cybersecuritytracker.ai/data/meta.json"
$meta.vendor_feeds | Select-Object -First 5 slug, name

Vendor feeds

Static per-vendor RSS for the top 200 vendors, plus a dynamic merged feed. The vendors parameter accepts any number of slugs from meta.json; unknown slugs are rejected, and URLs over 4096 characters return 414.

curl
curl -s https://cybersecuritytracker.ai/rss/vendor/fortinet.xml | head -20
curl -s "https://cybersecuritytracker.ai/rss/custom?cats=vulnerabilities&vendors=microsoft,cisco"
Python
import feedparser  # pip install feedparser

feed = feedparser.parse("https://cybersecuritytracker.ai/rss/custom?vendors=microsoft,cisco")
for entry in feed.entries[:5]:
    print(entry.title)
PowerShell
$rss = [xml](Invoke-WebRequest "https://cybersecuritytracker.ai/rss/vendor/fortinet.xml").Content
$rss.rss.channel.item | Select-Object -First 5 title

Custom RSS

One dynamic endpoint builds a merged feed from any combination of category and vendor slugs:

GET /rss/custom?cats=vulnerabilities,ransomware&vendors=microsoft,cisco

Both parameters are optional but at least one is required. Unknown slugs are rejected with 400, request URLs over 4096 characters return 414, and the feed carries a 15-minute cache header. Build one interactively on the feeds page, which also exports your vendor selection as an Outline Processor Markup Language (OPML) file.

Model Context Protocol (MCP) server

The same public data is available through a Model Context Protocol server so an artificial intelligence assistant can query it directly. It is a stateless, read-only endpoint at /mcp speaking JSON-RPC 2.0 (protocol revision 2025-06-18): POST a JSON-RPC message with an Accept of application/json. It holds no session and no private data, and every tool reads only the public shards documented above, never an operator page.

Four tools are exposed: search_vulnerabilities (filter the priority-ranked corpus by text, known-exploited status, and tier),get_vulnerability (one CVE's full record),list_recent_breaches, andget_corpus_insights. Results are truncated to a limit and report total_matched, so a capped list is never mistaken for a complete one.

curl
# 1. Initialize the session
curl -s -X POST https://cybersecuritytracker.ai/mcp \
  -H 'content-type: application/json' -H 'accept: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'

# 2. List the tools
curl -s -X POST https://cybersecuritytracker.ai/mcp \
  -H 'content-type: application/json' -H 'accept: application/json' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

# 3. Call a tool: the top 5 known-exploited CVEs by priority
curl -s -X POST https://cybersecuritytracker.ai/mcp \
  -H 'content-type: application/json' -H 'accept: application/json' \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"search_vulnerabilities","arguments":{"kev_only":true,"limit":5}}}'

Fair use

There are no keys and no hard rate limits on the data shards. Be a good neighbor: honor the cache headers, keep sustained polling at or under one request per second, and poll feeds no more than every 15 minutes, which matches their cache lifetime. The pipeline publishes on a schedule, so faster polling only re-reads identical bytes. If you need bulk history, fetch the monthly shards once rather than iterating the day shards.

Attribution

Ransomware leak-site data originates from RansomLook and is licensed CC BY 4.0: if you re-expose breach or actor data from this API, keep that attribution. Vulnerability data derives from CISA Known Exploited Vulnerabilities (KEV), the National Vulnerability Database (NVD), the Exploit Prediction Scoring System (EPSS) by FIRST, and vendor advisories. This product uses data from the NVD API but is not endorsed or certified by the NVD.

Adversary technique, group, and mitigation data comes from MITRE ATT&CK. © 2026 The MITRE Corporation. This work is reproduced and distributed with the permission of The MITRE Corporation. The KEV-to-ATT&CK technique mappings and the ATT&CK-to-NIST 800-53 control mappings come from the MITRE Engenuity Center for Threat-Informed Defense (CTID), used under Apache 2.0; keep both attributions if you re-expose that data.

Changelog

  • 2026-07-17Added a Model Context Protocol (MCP) server at /mcp: a stateless, read-only JSON-RPC endpoint (protocol revision 2025-06-18) over this same public data, with tools for searching the priority-ranked vulnerability corpus, fetching one CVE's full record, listing recent breaches, and reading the corpus insights. It reads only the public shards and holds no session or private data. See the Model Context Protocol section above.
  • 2026-07-17Added sigma_pack.json (a downloadable Sigma rule pack scoped to the tracker's technique index, with per-rule author attribution, back-links, and the embedded Detection Rule License 1.1 notice) and a static MISP feed under /data/misp/(manifest, one event per month of CISA Known Exploited Vulnerabilities additions, and hashes.csv; point a MISP instance's feed at the manifest URL). The MISP feed carries United States government public-domain facts plus the tracker's own priority tier only.
  • 2026-07-17Added attack_navigator_layer_v4_5.json: a downloadable ATT&CK Navigator layer (format 4.5) whose technique heat counts distinct CVEs with an exploitation mapping in the CTID Known Exploited Vulnerabilities mappings snapshot. The file is absent until those mappings are ingested, and the sample basis ships in the layer's own metadata.
  • 2026-07-16Retired the monolithic malicious_packages.json andbreaches.json: both now ship as a lean<name>_index.json plus per-record detail shards under /data/malicious_packages/ and/data/breaches/, fetched on demand, matching the vulnerabilities layout. The malicious-package bulk count (bulk_total) and the breach composition and reconciliation notes are unchanged. The older malicious_packages.json andbreaches.json paths are gone; use the indexes and their shards.
  • 2026-07-13Retired the monolithic vulns.json: the corpus now ships as a lean vulns_index.json plus per-CVE detail shards under /data/vulns/, fetched on demand, so no single file approaches Cloudflare's 25 MiB per-file cap. The oldervulns.json path is gone; use the index and its shards. The two entries below predate this change and describe the now-retired file.
  • 2026-07-08Added the Exploit-DB shard /data/exploits.json and the /rss/exploits.xml feed (metadata and Exploit-DB links only). vulns.json gained anexploits array per CVE, and breaches.jsongained url_is_onion.
  • 2026-07-06Added per-vendor RSS feeds, the vendors parameter on/rss/custom, and monthly rollups under/data/rollups/. vulns.json gainedcvss_version, epss_delta_7d,mentions_48h, mover_reasons, andmover_score. meta.json gainedvendor_feeds.
  • 2026-07-06Removed the five-category cap on /rss/custom. Added per-persona feeds and why_it_matters on stories.
  • 2026-07-01Initial public API: day and month shards, vulnerabilities, breaches, stats, calendar, and metadata.