Skip to content

Bulk CVE Lookup

Fetch multiple CVE details in a single request (up to 50 CVEs).

Endpoint

POST /api/v1/cve/batch

Request Body

FieldTypeRequiredDescription
cvesstring[]YesArray of CVE IDs to look up (max 50)

Alternative Field Name

You can also use ids instead of cves for the array field name.

Response

json
{
  "success": true,
  "data": {
    "CVE-2024-1234": {
      "found": true,
      "data": {
        "id": "CVE-2024-1234",
        "description": "A vulnerability in...",
        "severity": "HIGH",
        "cvss": 8.1,
        "published": "2024-01-15T00:00:00Z",
        "modified": "2024-01-20T00:00:00Z",
        "references": ["https://..."],
        "affected": [...]
      },
      "sourceUrl": "https://cveawg.mitre.org/api/cve/CVE-2024-1234"
    },
    "CVE-2024-5678": {
      "found": false,
      "error": "CVE not found"
    }
  },
  "summary": {
    "requested": 2,
    "found": 1,
    "notFound": 1,
    "invalidIds": ["not-a-cve"]
  },
  "timestamp": "2024-01-15T12:00:00.000Z"
}

Response Fields

Summary Object

FieldTypeDescription
requestednumberTotal CVEs requested
foundnumberCVEs successfully retrieved
notFoundnumberCVEs not found in database
invalidIdsstring[]Invalid CVE IDs that were skipped (only present if any)

CVE Result Object

FieldTypeDescription
foundbooleanWhether the CVE was found
dataobjectCVE details (when found)
sourceUrlstringLink to source CVE data (when found)
errorstringError message (when not found)

Examples

Basic Request

bash
curl -X POST "https://api.vulnpatch.dev/api/v1/cve/batch" \
  -H "Content-Type: application/json" \
  -d '{"cves": ["CVE-2024-3094", "CVE-2023-44487", "CVE-2021-44228"]}'

Response

json
{
  "success": true,
  "data": {
    "CVE-2024-3094": {
      "found": true,
      "data": {
        "id": "CVE-2024-3094",
        "description": "Malicious code was discovered in the upstream tarballs of xz...",
        "severity": "CRITICAL",
        "cvss": 10.0
      },
      "sourceUrl": "https://cveawg.mitre.org/api/cve/CVE-2024-3094"
    },
    "CVE-2023-44487": {
      "found": true,
      "data": {
        "id": "CVE-2023-44487",
        "description": "HTTP/2 Rapid Reset Attack...",
        "severity": "HIGH",
        "cvss": 7.5
      },
      "sourceUrl": "https://cveawg.mitre.org/api/cve/CVE-2023-44487"
    },
    "CVE-2021-44228": {
      "found": true,
      "data": {
        "id": "CVE-2021-44228",
        "description": "Apache Log4j2 JNDI features...",
        "severity": "CRITICAL",
        "cvss": 10.0
      },
      "sourceUrl": "https://cveawg.mitre.org/api/cve/CVE-2021-44228"
    }
  },
  "summary": {
    "requested": 3,
    "found": 3,
    "notFound": 0
  },
  "timestamp": "2024-01-15T12:00:00.000Z"
}

Code Examples

javascript
async function lookupCVEs(cveIds) {
  const response = await fetch('https://api.vulnpatch.dev/api/v1/cve/batch', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ cves: cveIds })
  });

  const { data, summary } = await response.json();

  console.log(`Found ${summary.found}/${summary.requested} CVEs`);

  for (const [cveId, result] of Object.entries(data)) {
    if (result.found) {
      console.log(`${cveId}: ${result.data.severity} (CVSS ${result.data.cvss})`);
    } else {
      console.log(`${cveId}: Not found`);
    }
  }

  return data;
}

// Usage
lookupCVEs(['CVE-2024-3094', 'CVE-2023-44487']);
python
import requests

def lookup_cves(cve_ids):
    response = requests.post(
        'https://api.vulnpatch.dev/api/v1/cve/batch',
        json={'cves': cve_ids}
    )
    result = response.json()

    print(f"Found {result['summary']['found']}/{result['summary']['requested']} CVEs")

    for cve_id, cve_result in result['data'].items():
        if cve_result['found']:
            data = cve_result['data']
            print(f"{cve_id}: {data.get('severity', 'N/A')} (CVSS {data.get('cvss', 'N/A')})")
        else:
            print(f"{cve_id}: Not found")

    return result['data']

# Usage
lookup_cves(['CVE-2024-3094', 'CVE-2023-44487'])

Error Responses

No CVEs Provided

json
{
  "success": false,
  "error": "Request body must contain a \"cves\" array of CVE IDs",
  "example": { "cves": ["CVE-2024-1234", "CVE-2024-5678"] }
}

Too Many CVEs

json
{
  "success": false,
  "error": "Maximum 50 CVEs per batch request",
  "requested": 75
}

No Valid CVE IDs

json
{
  "success": false,
  "error": "No valid CVE IDs provided",
  "invalidIds": ["invalid-id", "also-invalid"]
}

Notes

  • CVE IDs are case-insensitive (cve-2024-1234 works)
  • Invalid CVE IDs are skipped and reported in summary.invalidIds
  • Results are keyed by the normalized (uppercase) CVE ID
  • This endpoint is more efficient than making individual requests when you need multiple CVEs

Helping secure open source