List CVEs
Search and page through the CVE catalog.
GET/api/v1/cves
Returns summary records from the CVE catalog, newest first by default. Every filter composes with every other filter, and cursor pagination keeps deep result sets stable while new CVEs land.
The catalog is available to every authenticated caller; per-CVE tier gating applies to the detail endpoints below, not to this list.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
q | query | string | Substring match against the CVE id and title. |
severity | query | csv | Severity bands to include: critical, high, medium, low, none. Comma-separate for multiple. |
kev | query | boolean | Only KEV-listed (true) or non-KEV (false) CVEs. |
has_exploit | query | boolean | Filter on public exploit availability. |
has_patch | query | boolean | Filter on patch availability. |
has_detection | query | boolean | Filter on detection-content availability. |
assigner | query | string | Assigning CNA short name (case-insensitive exact match). |
cwe | query | string | Primary weakness, e.g. CWE-502. |
epss_min | query | number | Minimum EPSS score (0–1). |
published_since | query | date | Only CVEs published at or after this ISO date. |
published_until | query | date | Only CVEs published at or before this ISO date. |
updated_since | query | date | Only CVEs updated at or after this ISO date. |
sort | query | string | Sort key: published, updated, cvss, or epss. Prefix with - for descending. Default: -published. |
limit | query | integer | Page size, 1–100. Default: 25. |
cursor | query | string | Opaque cursor from the previous page’s pagination.next_cursor. |
Example request
curl "https://radicalnotion.ai/api/v1/cves?kev=true&severity=critical&sort=-epss&limit=2" \
-H "Authorization: Bearer $RN_TOKEN"Example response
{
"data": [
{
"cve_id": "CVE-2024-3400",
"state": "PUBLISHED",
"title": "PAN-OS: Arbitrary File Creation Leads to OS Command Injection Vulnerability in GlobalProtect",
"description": "A command injection as a result of arbitrary file creation vulnerability in the GlobalProtect feature of Palo Alto Networks PAN-OS software for specific PAN-OS versions and distinct feature configurations may enable an unauthenticated attacker to execute arbitrary code with root privileges on the firewall.\n\nCloud NGFW, Panorama appliances, and Prisma Access are not impacted by this vulnerability.",
"severity": "critical",
"cvss_score": 9.3,
"cvss_score_source": "rn_metrics",
"date_published": "2024-04-12T07:20:00Z",
"date_updated": "2025-07-30T01:37:04Z",
"assigner": "palo_alto",
"kev": {
"listed": true,
"date_added": "2024-04-12"
},
"ssvc": {
"exploitation": "active",
"automatable": "yes",
"technical_impact": "total",
"decision": "act"
},
"epss": {
"score": 0.99999,
"percentile": 1,
"date": "2026-07-22"
},
"has_patch": true,
"has_workaround": true,
"has_exploit": true,
"has_detection": true,
"detection_layers": [
"file_yara",
"network_ids",
"scanner",
"siem"
],
"primary_cwe_id": "cwe-77"
},
{
"cve_id": "CVE-2024-23897",
"state": "PUBLISHED",
"title": null,
"description": "Jenkins 2.441 and earlier, LTS 2.426.2 and earlier does not disable a feature of its CLI command parser that replaces an '@' character followed by a file path in an argument with the file's contents, allowing unauthenticated attackers to read arbitrary files on the Jenkins controller file system.",
"severity": "critical",
"cvss_score": 9.3,
"cvss_score_source": "rn_metrics",
"date_published": "2024-01-24T17:52:22Z",
"date_updated": "2025-07-30T01:37:08Z",
"assigner": "jenkins",
"kev": {
"listed": true,
"date_added": "2024-08-19"
},
"ssvc": {
"exploitation": "active",
"automatable": "yes",
"technical_impact": "total",
"decision": "act"
},
"epss": {
"score": 0.99999,
"percentile": 0.99995,
"date": "2026-07-22"
},
"has_patch": true,
"has_workaround": false,
"has_exploit": true,
"has_detection": true,
"detection_layers": [
"network_ids",
"siem"
],
"primary_cwe_id": "cwe-27"
}
],
"pagination": {
"limit": 2,
"next_cursor": "eyJ2IjowLjk5OTk5LCJpZCI6IkNWRS0yMDI0LTIzODk3In0"
}
}Response schema
| Field | Type | Description |
|---|---|---|
data[] | object[] | Summary records — the same shape as the detail endpoint’s core record (see below). |
pagination.limit | integer | Echo of the requested page size. |
pagination.next_cursor | string | null | Pass as ?cursor= to fetch the next page; null on the last page. |
Responses
| Status | Meaning |
|---|---|
200 | Success. |
400 | A path or query parameter failed validation. |
401 | Missing or invalid access token. |
429 | Rate limit exceeded. |
When no CVE matches the filters, `data` is empty and `next_cursor` is null.
{
"data": [],
"pagination": { "limit": 25, "next_cursor": null }
}- Cursors are tied to the sort they were minted under. Reusing a cursor with different sort or filter parameters returns invalid_cursor (400).