Abhängigkeits- Schwachstellenscan API
Prüft bis zu 50 Open-Source-Abhängigkeiten in einem einzigen Aufruf gegen OSV.dev. Liefert CVE-Aliase, einen berechneten CVSS-Basiswert, CWE-Kennungen und die genauen Versionen, die jede Meldung beheben.
Noch keinen API-Key?
Melde dich an, um API-Keys zu erstellen und zu verwalten.
Integrationsleitfaden
Snippet kopieren, deinen API-Key einsetzen, ausführen. Funktioniert in jedem HTTP-Client — Beispiele unten in cURL, JavaScript und Python.
/api/scan-dependencieshttps://www.apipick.comCheck open-source packages against the OSV.dev vulnerability database
packagesarrayerforderlichUp to 50 objects, each with ecosystem, name, and an exact installed version. [{"ecosystem":"npm","name":"lodash","version":"4.17.15"}]
curl -X POST "https://www.apipick.com/api/scan-dependencies" \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"packages": [
{
"ecosystem": "npm",
"name": "lodash",
"version": "4.17.15"
},
{
"ecosystem": "PyPI",
"name": "requests",
"version": "2.19.0"
}
]
}'{
"summary": {
"packages_scanned": 2,
"vulnerable_packages": 2,
"total_vulnerabilities": 8,
"by_severity": {
"critical": 1,
"high": 3,
"medium": 4,
"low": 0,
"none": 0,
"unknown": 0
},
"highest_cvss_score": 9.8
},
"results": [
{
"ecosystem": "npm",
"name": "lodash",
"version": "4.17.15",
"vulnerable": true,
"highest_severity": "HIGH",
"highest_cvss_score": 7.4,
"vulnerability_count": 6,
"vulnerabilities": [
{
"id": "GHSA-35jh-r3h4-6jhm",
"aliases": [
"CVE-2021-23337"
],
"cve": "CVE-2021-23337",
"summary": "Command Injection in lodash",
"severity": "HIGH",
"cvss_score": 7.2,
"cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H",
"cwe_ids": [
"CWE-77"
],
"published": "2021-02-15T00:00:00Z",
"fixed_versions": [
"4.17.21"
],
"advisory_url": "https://osv.dev/vulnerability/GHSA-35jh-r3h4-6jhm"
}
],
"error": null
}
],
"source": "OSV.dev (Google Open Source Vulnerabilities, CC-BY-4.0)",
"credits_used": 5,
"remaining_credits": 95
}Gebaut für reale Anwendungsfälle
Release-Gates
Lassen Sie einen Build scheitern, sobald eine Abhängigkeit einen CVSS-Schwellenwert überschreitet. Mit einem numerischen Wert ist die Regel ein einzeiliger Vergleich statt eines Textabgleichs.
Coding-Agenten
Lassen Sie einen Agenten eine Version prüfen, bevor er sie in ein Manifest schreibt – und im selben Zug die behobene Version vorschlagen.
Lockfile-Audits
Schicken Sie ein komplettes Manifest in 50er-Blöcken durch und erhalten Sie je Service eine Auswertung nach Schweregrad, ohne einen Scanner in der CI zu betreiben.
Lieferanten-Due-Diligence
Bewerten Sie die von einem Dritten angegebenen Abhängigkeiten vor Vertragsschluss anhand öffentlicher Meldungen – mit belegbaren Daten.
Antwortfelder
| Feld | Typ | Beschreibung |
|---|---|---|
| summary.vulnerable_packages | integer | Wie viele der übermittelten Pakete mindestens eine Meldung aufweisen |
| summary.by_severity | object | Anzahl der Meldungen nach critical / high / medium / low / none / unknown |
| summary.highest_cvss_score | number | null | Höchster CVSS-Basiswert im gesamten Scan |
| results[].vulnerable | boolean | Ob diese Paketversion eine nicht zurückgezogene Meldung hat |
| results[].vulnerabilities[].id | string | OSV-Meldungs-ID, z. B. GHSA-35jh-r3h4-6jhm |
| results[].vulnerabilities[].cve | string | null | CVE-Alias, sofern vorhanden |
| results[].vulnerabilities[].severity | string | CRITICAL, HIGH, MEDIUM, LOW, NONE oder UNKNOWN |
| results[].vulnerabilities[].cvss_score | number | null | Aus dem Vektor der Meldung berechneter CVSS-v3.1-Basiswert |
| results[].vulnerabilities[].cwe_ids | string[] | CWE-Schwachstellenklassifizierungen der Meldung |
| results[].vulnerabilities[].fixed_versions | string[] | Versionen dieses Pakets, die die Meldung beheben |
| results[].error | string | null | Gesetzt, wenn genau dieses Paket nicht geprüft werden konnte; alle übrigen werden dennoch geliefert |
| credits_used | integer | Für diese Anfrage abgezogene Credits |
| remaining_credits | integer | Verbleibende Credits in deinem Account |
Rate-Limits
Die Drosselung erfolgt pro API-Key, gleitendes 60-Sekunden-Fenster. Beim Erreichen des Limits bekommst du ein sauberes 429 mit Retry-After-Header.
20req/min
Pro API-Key, pro Endpunkt. Gleitendes 60-Sekunden-Fenster.
3concurrent
Maximale gleichzeitige laufende Anfragen pro API-Key.
X-RateLimit-LimitMaximal zulässige Anfragen pro MinuteX-RateLimit-RemainingVerbleibende Anfragen im aktuellen FensterX-RateLimit-ResetSekunden bis zum Zurücksetzen des aktuellen FenstersRetry-AfterSekunden Wartezeit vor erneutem Versuch (nur bei 429)HTTP/1.1 429 Too Many Requests
Retry-After: 12
X-RateLimit-Limit: 20
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 12
{
"error": "rate_limit_exceeded",
"message": "Rate limit exceeded: 20 requests/minute per API key. Retry after 12s.",
"retry_after": 12
}Datenquelle & Lizenz
Die Meldungen stammen aus OSV.dev, Googles offener Schwachstellendatenbank, veröffentlicht unter CC-BY-4.0. OSV führt die GitHub Advisory Database, die Go-Schwachstellendatenbank, RustSec, PyPA und die Security-Tracker der großen Distributionen in einem Schema zusammen. Wir ergänzen die Berechnung des CVSS-Basiswerts und die Auswertung je Paket.
Häufig gestellte Fragen
F: Woher stammen die Schwachstellendaten?
A: Aus OSV.dev, Googles offener Schwachstellendatenbank. Sie führt die GitHub Advisory Database, die Go-Schwachstellendatenbank, RustSec, PyPA und die Security-Tracker der Distributionen in einem Schema zusammen und veröffentlicht sie unter CC-BY-4.0. Meldungen sind in der Regel wenige Stunden nach Veröffentlichung abrufbar.
F: Wie wird der CVSS-Wert berechnet?
A: OSV-Meldungen enthalten die CVSS-Vektorzeichenfolge, aber nicht den Zahlenwert. Wir berechnen den CVSS-v3.1-Basiswert nach der offiziellen Formel aus diesem Vektor – Sie erhalten also einen Wert, auf den Sie direkt einen Schwellenwert setzen können. Fehlt einer Meldung ein v3-Vektor (nur v4 oder eine Ökosystem-Meldung ohne Vektor), ist cvss_score null und severity greift auf die Einstufung des Herausgebers zurück.
F: Kann ich ein komplettes Lockfile scannen?
A: Ja – parsen Sie es auf Ihrer Seite und senden Sie bis zu 50 Pakete pro Aufruf. Ein Aufruf kostet 5 Credits, unabhängig davon, wie viele Pakete er enthält; ein 50er-Block entspricht also 0,1 Credits pro Paket. Größere Manifeste teilen Sie in 50er-Blöcke auf.
F: Werden Versionsbereiche unterstützt?
A: Nein. Senden Sie die exakt installierte Version, so wie sie im Lockfile steht (4.17.15, nicht ^4.17.0). OSV gleicht Bereiche gegen eine konkrete Version ab, um zu bestimmen, ob diese betroffen ist – ein Bereich als Eingabe hat daher keine eindeutige Antwort.
F: Was passiert, wenn die Abfrage eines Pakets fehlschlägt?
A: Der Scan wird trotzdem zurückgegeben. Das betreffende Paket erhält ein error-Feld und fließt nicht in die Zusammenfassung ein, während alle anderen normal gemeldet werden. Die Antwort setzt außerdem packages_failed, damit Sie wissen, dass die Auswertung unvollständig ist.