Vulnerabilities
Overview
Public vulnerabilities with the two things that decide urgency: whether CISA has seen it exploited, and how likely exploitation is.
- status
- live
- document id
doc_ide.g.CVE-2024-3400- citation
[CVE-2024-3400]
Common calls
Vulnerabilities in a product
POST /v1/cve/search {"query": "palo alto globalprotect rce"}Exploited in the wild, ranked by EPSS
POST /v1/cve/search {"query": "", "filters": {"kev": true, "severity": ["critical","high"]}, "sort": "epss"}Read one
GET /v1/cve/read/CVE-2024-3400Words, not meaning. This domain has no vectors: mode is keyword and a sentence describing what you want will find nothing — give it the terms. Quoted phrases, OR and -exclusions work; Chinese is segmented, and a mixed query is split into both.
The fine print
- NVD data is used under its terms: any display must carry the not-endorsed notice (see the attribution field).
- kev=true means CISA confirmed exploitation in the wild; epss is FIRST's probability estimate — different things.
- severity is derived from cvss_score; the 3,347 CVEs without a score have neither.
- Rank by exploitation risk with sort=epss, by time with sort=date.
- vuln_class / attacker_needs / impact / one_liner* are model-written — fine as a summary, not as a quote; the original text is description, in level=detail.
- Model-written fields (summarise, do not quote): affected, attacker_needs, impact, one_liner, one_liner_zh, vuln_class.
- The field table and enumerations are generated from the store's own self-description (search.field), not hand-written; enumeration counts are as of 2026-10-13.
Search
POST
/v1/cve/searchHybrid retrieval, one card per hit. 2 credits. Free sample:
log4j.Filter fields
| field | type · ops | meaning |
|---|---|---|
| cvss_score | number · range | CVSS score, range |
| epss | number · range | EPSS 30-day exploitation probability (0–1), range |
| kev | bool · eq | Listed in CISA KEV (known exploited in the wild) |
| published | datetime · range | Publication date range |
| severity | keyword · eq anymedium · high · critical · low | CVSS severity (derived from the score) |
| vuln_class | keyword · eq anyxss · remote_code_execution · denial_of_service · information_disclosure · injection · memory_corruption … 17 values, /facets lists them all | Vulnerability class (closed set of 17, model-assigned) |
3 more, all usable
| field | type · ops | meaning |
|---|---|---|
| affected | text · text | Affected product (fuzzy match, e.g. globalprotect) |
| cwe | keyword · eq any | CWE id |
| kev_added | datetime · range | Date added to KEV, range |
Parameters
| Parameter | Type | Description |
|---|---|---|
| query REQUIRED | string | 1–1000 characters. Or an array of up to 5 (batch; hits become results[]). |
| top_k | integer= 10 | 1–200. |
| fields | brief · head= brief | head costs one more credit and returns the head view per hit. |
| filters | json | Filter DSL object (see Getting started); declared fields are listed above. |
| mode | keyword= keyword | This domain has one mode — keyword matching, not semantics. |
| sort | relevance · date · epss · kev_added · published= relevance | Order of the hits. epss puts the likeliest to be exploited first. |
| offset | integer= 0 | Pagination. |
Example
{ "domain": "cve", "query": "…", "hits": [ { "id": "CVE-2024-3400", "score": 0.83, "brief": { … } } ], "total": null, "coverage": …, "warnings": [],
"meta": { "request_id": "req_…", "credits": { "charged": 2, "balance": 1998, "pool": "allowance" }, "latency_ms": 41, "cached": false } } Undeclared filter fields return 400 rather than being ignored silently. Filters combine with AND;
_or / _not are available.Read
GET
/v1/cve/read/{doc_id}Three depths.
detail is the default. Free sample: CVE-2024-3400.Levels
| level | credits | returns |
|---|---|---|
| brief | 1 | Card: affected, cvss_score, doc_id, epss, kev, one_liner, one_liner_zh, published… |
| detail (default) | 2 | Every structured field (card plus the source abstract and detail fields) |
Parameters
| Parameter | Type | Description |
|---|---|---|
| doc_id (path) REQUIRED | string | Document id (doc_id). |
| level | brief · detail= detail | How deep to read. |
| format | json · md · html= json | Response shape. |
Example
{ "domain": "cve", "id": "CVE-2024-3400", "level": "detail", "view": "detail", "data": { … } | "text": "…", "token_count": 1834, "meta": { … } } The older
GET /v1/cve/doc/{id}?view=… still works.Read many
POST
/v1/cve/readUp to 50 ids, one level. Missing ids come back with
error: "not_found" and are not charged.Parameters
| Parameter | Type | Description |
|---|---|---|
| ids REQUIRED | string[] | Document ids. |
| level | brief · detail= detail | Level for every id. |
Example
{ "domain": "cve", "level": "detail", "docs": [ { "id": "…", "data": { … } }, { "id": "…", "error": "not_found" } ], "meta": { … } } Facets
GET
/v1/cve/facets?field={field}Legal values for a filter field, so an agent never guesses; precomputed fields carry counts, declared enums come without. Free, no key.
Parameters
| Parameter | Type | Description |
|---|---|---|
| field REQUIRED | severity · vuln_class | Filter field with facets. |
| limit | integer= 50 | Max values. |
Example
{ "domain": "cve", "field": "…", "values": [ { "value": "…", "count": 3120 } ], "meta": { … } } Askregistered key+ /stream
POST
/v1/cve/askAgentic Q&A over this domain: with no vector layer, the model turns the question into structured filters plus bilingual full-text search, reads the hits and answers with [cve: ] citations; /stream is NDJSON with real token deltas.
effort low / medium / high = 50 / 100 / 200 credits. Append /stream for NDJSON; the first event is always billing. A failure before the first answer_delta is refunded.Parameters
| Parameter | Type | Description |
|---|---|---|
| query REQUIRED | string | 1–2000 characters. Be specific; ask for numbers if you want numbers. |
| effort | low · medium · high= low | Reading rounds, and the price: 50 / 100 / 200 credits. Your plan caps it. |
| verbose | bool= false | Include the tool-call trace (tool_call / tool_result / thinking events when streaming). |
| top_k | integer= 10 | Speculative prefetch size. |
| stream_answer | bool= true | Streaming only: false emits one answer event instead of deltas. |
| max_rounds | integer | 0–8, overrides the effort preset. |
| force_answer_after | number | Seconds; hard cutover into the answer phase. |
| max_answer_tokens | integer= 4096 | Hitting it sets answer_truncated. |
| language | string | Answer language; defaults to the query’s. |
Example
{ "answer": "… [CVE-2024-3400] …", "sources": [ … ], "stats": { "rounds": 1, "elapsed_s": 6.2, "answer_truncated": false }, "coverage"?: { … }, "meta": { "credits": { "charged": 50, … } } } Citations are real — every id in
answer exists in this domain (format [CVE-2024-3400]). sources is the retrieval set, not the citation list. answer_truncated means incomplete.