SwarmHawk API
Die SwarmHawk API gibt Ihnen programmatischen Zugriff auf 27 automatisierte Sicherheitsprüfungen plus 3.000+ aktive Nuclei CVE-Templates — SSL, DNS, CVEs mit aktiver Exploit-Bestätigung, Breach-Exposure, Typosquats, KI-Threat-Analyse und mehr — für jede Domain. Nutzen Sie sie, um Sicherheits-Workflows zu erstellen, Due Diligence zu automatisieren oder SwarmHawk in Ihre eigene Plattform zu integrieren.
Es gibt zwei API-Oberflächen:
/api/v2— die Legacy-Session-/JWT-authentifizierte Oberfläche, die vom Dashboard verwendet wird. Die meisten Lese- und Schreibvorgänge sind hier ebenfalls für Kompatibilität verfügbar./api/v1— die moderne öffentliche Business / Enterprise API, gesichert mit Bearer API Keys (swh_…). Dies ist das Ziel für neue Integrationen.
Content-Type: application/json setzen.Quick Start — eine Domain in 30 Sekunden scannen
# 1. Create an API key at www.swarmhawk.com → Account → API Keys (Business or Enterprise) # 2. Add and start scanning a domain: curl -X POST https://api.swarmhawk.com/api/v1/domains \ -H "Authorization: Bearer swh_your_key_here" \ -H "Content-Type: application/json" \ -d '{"domain": "example.com"}' # Poll the latest report: curl https://api.swarmhawk.com/api/v1/jobs/<job_id> \ -H "Authorization: Bearer swh_your_key_here"
import requests API_KEY = "swh_your_key_here" BASE = "https://api.swarmhawk.com/api/v1" H = {"Authorization": f"Bearer {API_KEY}"} resp = requests.post(f"{BASE}/domains", headers=H, json={"domain": "example.com"}) job_id = resp.json()["job_id"] job = requests.get(f"{BASE}/jobs/{job_id}", headers=H).json() print(f"State: {job['state']}")
const BASE = "https://api.swarmhawk.com/api/v1"; const H = { "Authorization": "Bearer swh_your_key_here", "Content-Type": "application/json" }; const add = await fetch(`${BASE}/domains`, { method: "POST", headers: H, body: JSON.stringify({ domain: "example.com" }) }).then(r => r.json()); const job = await fetch(`${BASE}/jobs/${add.job_id}`, { headers: H }).then(r => r.json()); console.log(`State: ${job.state}`);
Authentifizierung
SwarmHawk verwendet je nach Endpunkt zwei Authentifizierungsmethoden:
| Methode | Kopfzeile | Verwendet für |
|---|---|---|
| API-Schlüssel (Bearer) | Authorization: Bearer swh_… | /api/v1/* öffentliche Business / Enterprise API |
| Session JWT | Authorization: Bearer <jwt> | /api/v2/* und Dashboard-Endpunkte (benutzerauthentifiziert) |
| Keine | — | /public-scan, /health |
API-Schlüsselformat
swh_3f8a2b1c4d5e6f7a8b9c0d1e2f3a4b5c
Fehler & Rate Limits
HTTP-Statuscodes
| Code | Bedeutung |
|---|---|
| 200 | Erfolg |
| 400 | Ungültige Anfrage — überprüfen Sie Ihren Request Body |
| 401 | Fehlender oder ungültiger API-Schlüssel / Sitzungstoken |
| 403 | Verboten — Funktion erfordert einen kostenpflichtigen Plan |
| 429 | Anfragenbegrenzung überschritten |
| 500 | Serverfehler — bitte nach 30 Sekunden erneut versuchen |
Fehlerantwort-Struktur
{
"detail": "Invalid API key"
}Ratenbegrenzungen
| Plan | Limit |
|---|---|
| Free | API-Schlüssel nicht verfügbar; verwenden Sie das Dashboard oder /public-scan |
| Business | Standardes Pro-Konto-Kontingent mit Wallet-Aufstockung für spontane Gutschriften |
| Enterprise | Benutzerdefinierte Limits nach Vereinbarung im Vertrag |
| /public-scan | Kein Schlüssel erforderlich · gedrosselt nach IP |
Eine Domain scannen
Es gibt keinen einzelnen "One-Shot-Scan"-Endpunkt. Um eine Domain über die API zu scannen:
- Fügen Sie die Domain mit
POST /api/v1/domainshinzu (und verifizieren Sie sie) – der erste Scan wird automatisch in die Warteschlange eingereiht. - Um eine bereits hinzugefügte Domain erneut zu scannen, rufen Sie
POST /api/v1/domains/{domain_id}/scanauf. - Rufen Sie
GET /api/v1/jobs/{job_id}für den Status ab undGET /api/v2/domains/{domain_id}/reportfür die neuesten Ergebnisse. - Für einmalige anonyme Scans ohne Konto verwenden Sie
POST /public-scan(Rate-Limited, Ergebnisse werden nicht gespeichert).
POST /public-scan
Anonymer Scan — kein API-Schlüssel erforderlich. Gibt eine Teilmenge von Prüfungen mit einigen gesperrten Ergebnissen zurück. Verwenden Sie dies für Demos oder Einbettungen. Ergebnisse werden nicht gespeichert.
| Feld | Typ | Beschreibung |
|---|---|---|
| domain | string | Zu scannierende Domain |
{
"domain": "example.com",
"risk_score": 42,
"critical": 1,
"warnings": 3,
"locked_count": 8,
"checks": [/* 7 free checks visible, 8 locked */],
"scanned_at": "2025-03-10T09:15:00Z"
}GET /scan/passive
Schnelle Fingerprint-Analyse — erkennt den Software-Stack und prüft auf bekannte CVEs ohne vollständige Scan. Antwort in ~3 Sekunden. Keine Ergebnisse gespeichert.
{
"domain": "example.com",
"software": [
{"product": "nginx", "version": "1.18.0"},
{"product": "WordPress", "version": "6.3.1"}
],
"cve_hits": [
{
"product": "WordPress 6.3.1",
"top_cve": "CVE-2023-39320",
"top_cvss": 9.8,
"cve_count": 3
}
],
"max_cvss": 9.8,
"priority": "CRITICAL"
}priority: CRITICAL (cvss ≥ 9) · HIGH (≥ 7) · MEDIUM (≥ 4) · LOW. Falls die vorgelagerte Scanner-Flotte nicht verfügbar ist, gibt der Endpunkt eine leere Ergebnisstruktur zurück, anstatt einen 5xx-Fehler auszulösen.
GET /api/v2/domains
Zeigen Sie alle Domains in Ihrem Konto mit ihren neuesten Risikobewertungen und Prüfungen an.
{
"domains": [
{
"id": "uuid",
"domain": "example.com",
"country": "DE",
"status": "active",
"paid": true,
"risk_score": 42,
"scanned_at": "2025-03-10T09:15:00Z",
"checks": [/* latest check array */],
"scan_history": [{"date":"…","risk":42}]
}
]
}POST /api/v2/domains
Fügen Sie eine Domain zu Ihrem Konto hinzu und starten Sie einen Hintergrund-Scan.
| Feld | Typ | Beschreibung |
|---|---|---|
| domain | string | Domäne zum Hinzufügen, z. B. "mycompany.cz" |
| country | string | ISO-Ländercode (optional — wird automatisch aus der TLD erkannt) |
{
"id": "uuid",
"domain": "mycompany.cz",
"status": "scanning",
"message": "Domain added — scan starting now"
}GET /api/v2/domains/{domain_id}/report
Rufen Sie den neuesten vollständigen Scan-Bericht für eine Domain ab. Kostenlose Benutzer sehen eine Teilmenge; zahlende Benutzer sehen alle 27 Prüfungen einschließlich Nuclei Active CVE Validierung und KI-Zusammenfassung.
{
"domain": "example.com",
"risk_score": 42,
"scanned_at": "2025-03-10T09:15:00Z",
"paid": true,
"critical": 1,
"warnings": 3,
"informational": 2,
"locked_count": 0,
"verified_at": "2026-04-08T10:00:00Z",
"checks": [
{
"check": "ssrf",
"status": "info",
"confidence": "informational",
"title": "A10: 3 SSRF surface indicator(s)",
"detail": "Surface area detected (not confirmed vulnerabilities)…",
"score_impact": 0
}
]
}Jedes Check-Objekt enthält nun ein confidence-Feld: "confirmed" (bewertet) oder "informational" (keine Strafe, nur Oberflächenindikator). Informative Findings werden niemals in warnings oder critical gezählt.
GET /domains/{domain_id}/verify-token
Geben Sie die Live-Eigentümerschaftsprüfung zurück, die vom Verification Orchestrator ausgegeben wurde. SwarmHawk unterstützt zwei Verifizierungsmethoden — DNS-TXT-Eintrag oder HTTP-Datei-Upload. Rufen Sie POST /domains/{domain_id}/verify mit method: "dns" oder "http" auf, sobald der Eintrag/die Datei veröffentlicht ist.
{
"domain": "example.com",
"verified_at": null,
"orchestrator_state": "pending",
"method": {
"name": "DNS TXT record",
"record_name": "_swarmhawk-verify.example.com",
"record_value": "swarmhawk-verify=a3f7b2c1…",
"hint": "Add a TXT record named _swarmhawk-verify.example.com with the value above. Click 'Check DNS' once propagated."
},
"methods": [
{
"type": "dns",
"name": "DNS TXT record",
"record_name": "_swarmhawk-verify.example.com",
"record_value": "swarmhawk-verify=a3f7b2c1…",
"hint": "Add a TXT record …"
},
{
"type": "http",
"name": "File upload",
"path": "/.well-known/swarmhawk-verify.txt",
"url": "https://example.com/.well-known/swarmhawk-verify.txt",
"body": "swarmhawk-verify=a3f7b2c1…",
"hint": "Upload a file at the URL containing the body above. Click 'Check File' once it returns 200."
}
]
}Der HTTP-Method-Eintrag ist nur vorhanden, wenn der Orchestrator eine http_path-Challenge ausgegeben hat. Wenn der Orchestrator nicht erreichbar ist, gibt der Endpoint 503 no_verification_orchestrator zurück.
POST /domains/{domain_id}/verify
Fordern Sie den Orchestrator auf, den Besitz mit der ausgewählten Methode zu bestätigen. Bei erfolgreicher Verifizierung wird domains.verified_at geschrieben und in nachfolgenden Report-Responses zurückgegeben. Der Orchestrator speichert positive Verifizierungen 7 Tage lang.
Request-Body (optional, Standard ist dns):
{ "method": "dns" } // or "http"Erfolgreiches Ergebnis:
{ "verified": true, "method": "dns" }Noch nicht gefundene Antwort:
{ "verified": false, "state": "pending", "method": "dns", "detail": "DNS-TXT record not found yet" }GET /api/v2/domains/{domain_id}/history
Risiko-Score-Trend im Zeitverlauf — nützlich für die Erstellung von Dashboards oder Warnungen bei Score-Anstieg.
{
"domain": "example.com",
"scans": [
{"risk_score":42,"critical":1,"warnings":3,"scanned_at":"2025-03-10T09:15:00Z"},
{"risk_score":38,"critical":0,"warnings":4,"scanned_at":"2025-02-10T08:00:00Z"}
]
}GET /api/v2/domains/{domain_id}/nis2
Ordnen Sie Scan-Erkenntnisse den Artikeln der NIS2-Richtlinie zu. Liefert eine Compliance-Bewertung und Status pro Artikel — geeignet als Audit-Nachweis für Regulierungsbehörden.
{
"domain": "example.com",
"risk_score": 42,
"nis2_score": 71,
"articles": [
{
"article": "Art.21(2)(i)",
"requirement": "Secure communications",
"status": "met"
},
{
"article": "Art.21(2)(h)",
"requirement": "Supply chain security",
"status": "warning"
}
]
}POST /intel
Erstellen Sie ein KI-gestütztes Threat-Briefing für Ihr Domain-Portfolio mit Claude. Liefert ein strukturiertes Briefing mit Executive Summary, kritischen Erkenntnissen und Remediation-Prioritäten.
| Feld | Typ | Beschreibung |
|---|---|---|
| domains | string | Kommagetrennt: "example.com (risk:42), other.cz (risk:18)" |
| date | string | Heutiges Datum, z.B. "10. März 2025" |
{
"text": "## Executive Summary\n\nYour domain portfolio shows...",
"briefing": "…"
}POST /api/v2/keys
Erstellen Sie einen neuen API-Schlüssel für Ihr Konto. Gibt alle Schlüssel einschließlich des neuen zurück.
{
"keys": [
{
"key": "swh_3f8a2b1c4d5e6f7a8b9c0d1e2f3a4b5c",
"calls_this_month": 0,
"limit_per_month": 10,
"active": true,
"created_at": "2025-03-10T09:00:00Z"
}
]
}GET /api/v2/keys
Alle API-Schlüssel und deren Nutzung für den aktuellen Monat auflisten.
curl https://api.swarmhawk.com/api/v2/keys \
-H "Authorization: Bearer YOUR_SESSION_TOKEN"DELETE /api/v2/keys/{key}
Widerrufen Sie einen API-Schlüssel sofort. Alle zukünftigen Anfragen mit diesem Schlüssel werden abgelehnt.
{ "revoked": "swh_3f8a2b1c…" }Business / Enterprise API — /api/v1
Die /api/v1/* Oberfläche ist die produktive Schreib-API für Business- und Enterprise-Kunden. Jeder Endpunkt akzeptiert entweder X-API-Key: swh_… (empfohlen für Server-zu-Server) oder Authorization: Bearer <jwt> (für interne Tools).
Tier-Gating
- Kostenlos — API-Zugriff verweigert (
403 API_ACCESS_REQUIRED). - Pro — 10-Aufrufe schreibgeschützter Test. Schreib-Endpunkte geben
403 business_requiredzurück. - Business — 500 Aufrufe/Monat, Wallet-/Berechtigungsabzug pro Scan/Pentest/Breach.
- Enterprise — unbegrenzte Aufrufe; Admin-gesteuert mit einer kundenspezifischen
max_domains-Obergrenze und Pro-Aufruf-Abrechnung (Details).
Typischer Reseller-Workflow
# 1. Add a domain (returns the DNS challenge inline) curl -X POST https://api.swarmhawk.com/api/v1/domains \ -H "X-API-Key: swh_…" -H "Content-Type: application/json" \ -d '{"domain":"acme.com"}' # {"id":"…","domain":"acme.com","verification":{"state":"pending","dns_record_name":"_swarmhawk.acme.com","dns_record_value":"swh-verify=…"}} # 2. Tenant adds the DNS TXT record, then verify curl -X POST https://api.swarmhawk.com/api/v1/domains/{id}/verify \ -H "X-API-Key: swh_…" # {"verified":true,"state":"verified","method":"dns"} # 3. Kick off a scan / pentest / breach lookup (returns job_id) curl -X POST https://api.swarmhawk.com/api/v1/domains/{id}/scan -H "X-API-Key: swh_…" # {"job_id":"…","status":"queued","domain":"acme.com","swarmhawk_job_id":"…"} # 4. Poll the orchestrator-side job and pull results when status=done curl https://api.swarmhawk.com/api/v1/jobs/{job_id} -H "X-API-Key: swh_…" curl https://api.swarmhawk.com/api/v1/jobs/{job_id}/findings -H "X-API-Key: swh_…" curl https://api.swarmhawk.com/api/v1/jobs/{job_id}/report -H "X-API-Key: swh_…"
POST /api/v1/keys
Geben Sie einen API-Schlüssel für den aktuellen Benutzer aus. Business: ein Schlüssel, 500 Aufrufe/Monat. Enterprise: ein Schlüssel, unbegrenzt (von Admin über /admin/api/v1/enterprise/* verwaltet). Nur Bearer JWT — Sie können Ihren ersten Schlüssel nicht mit sich selbst bootstrappen; die Dashboard-Anmeldung (oder Admin-Registrierung für Enterprise) ist der Einstiegspunkt.
curl -X POST https://api.swarmhawk.com/api/v1/keys -H "Authorization: Bearer …" # { "keys": [{ "id":"…", "key_prefix":"swh_…", "calls_this_month":0, "limit_per_month":500 }], # "created": true, "is_trial": false, "full_key": "swh_…" } ← plaintext shown ONCE
GET /api/v1/keys
Aktive Schlüssel + Nutzung des laufenden Monats auflisten. Klartext wird nie erneut angezeigt. Nur Bearer JWT — Key-Management-Endpunkte sind nicht mit einem API-Schlüssel erreichbar.
{ "keys": [{ "id":"…", "key_prefix":"swh_3f8a2b1c",
"calls_this_month":142, "limit_per_month":500,
"cost_this_month_usd":"23.50", "last_used_at":"2026-05-12T19:01:00Z" }] }POST /api/v1/keys/{key_id}/regenerate
Widerrufen Sie den vorhandenen Schlüssel und geben Sie einen neuen aus. Der neue Klartext wird einmal in der Antwort angezeigt — der vorherige Schlüssel funktioniert sofort nicht mehr. Nur Bearer JWT.
DELETE /api/v1/keys/{key_id}
Einen Schlüssel widerrufen. Idempotent. Nur Bearer JWT.
GET /api/v1/domains
Listet die Domänen des Aufrufers auf. Paginiert; berücksichtigt ?limit und ?offset.
POST /api/v1/domains
Fügen Sie eine Domäne hinzu und initialisieren Sie atomisch die Orchestrator-Verifizierung. Gibt die DNS-TXT-Herausforderung inline zurück, sodass Sie diese ohne weiteren Anruf an Ihren Mandanten übermitteln können. Kostenlos für den Kunden — Domänenzusätze belasten das Wallet nicht.
Text
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| domain | string | yes | 4–253 Zeichen, Kleinbuchstaben. |
| country | string | — | ISO 3166-1 alpha-2. Wird automatisch von der TLD abgeleitet, falls nicht vorhanden. |
| industry | string | — | Frei wählbares Label zur Gruppierung und Berichterstattung. |
| primary_contact | string | — | E-Mail für Breach-/Alert-Weiterleitung. |
Antwort (201)
{
"id": "d1-uuid",
"domain": "acme.example.com",
"country": "US",
"verification": {
"state": "pending",
"dns_record_name": "_swarmhawk.acme.example.com",
"dns_record_value": "swh-verify=Xk2…",
"http_path": "/.well-known/swarmhawk-verify.txt",
"http_body": "swh-verify=Xk2…",
"expires_at": "2026-05-19T20:00:00Z"
}
}Fehler: 403 tier_locked bei Kontingent; 409 domain_already_added bei Duplikat; 422 invalid_domain.
GET /api/v1/domains/{domain_id}
Einzelne Domain-Details: risk_score, last_scanned_at, verified_at, country, etc. 404 bei Nichtübereinstimmung.
PATCH /api/v1/domains/{domain_id}
Schalten Sie auto_rescan_enabled für eine Domain um (das einzige derzeit änderbare Feld auf diesem Endpunkt). Das Aktivieren erfordert Pro-Tier oder höher (das daily_rescan Feature Gate); Deaktivieren ist immer erlaubt. Um industry, primary_contact oder country zu ändern, löschen und fügen Sie die Domain erneut hinzu.
curl -X PATCH https://api.swarmhawk.com/api/v1/domains/{id} \
-H "Authorization: Bearer …" -H "Content-Type: application/json" \
-d '{"auto_rescan_enabled": true}'
# { "ok": true }DELETE /api/v1/domains/{domain_id}
Domain endgültig löschen. Die Zeile, ihr Verifizierungsstatus und alle zugehörigen Job-Datensätze werden entfernt. Gibt einen Slot gegen das Tier-Limit frei. Kontingent +1.
POST /api/v1/domains/bulk-import
Mehrteil-Upload einer CSV-Datei — jede Zeile ist domain,country (country ist erforderlich, 2-stelliger ISO-Code). Die erste Zeile kann ein domain,country-Header sein — dieser wird übersprungen. Beachtet das kundenseitige Limit; Zeilen, die das Limit überschreiten, landen in der rejected-Liste mit Grund quota exceeded. Quota +1 pro Aufruf (nicht pro Zeile).
Gibt {accepted: [...], rejected: [...]} zurück. Verfügbar in Business + Enterprise Tarifen (Feature: bulk_import).
GET /api/v1/domains/{domain_id}/history
Zeitlich geordnete Liste früherer Scans + Überprüfungsunterschiede für eine Domain.
GET /api/v1/domains/{domain_id}/verification
Schreibgeschützter Abruf des aktuellen Autorisierungsherausforderungsstatus vom Orchestrator (DNS + HTTP-Pfad + Datensatzwerte + Ablauf). Verwenden Sie dies, wenn Sie die Herausforderung nach Verlust der ursprünglichen POST /api/v1/domains-Antwort erneut anzeigen müssen.
{
"domain": "acme.example.com",
"state": "pending", // pending | verified | failed | expired
"verified_at": null,
"dns_record_name": "_swarmhawk.acme.example.com",
"dns_record_value": "swh-verify=Xk2…",
"http_path": "/.well-known/swarmhawk-verify.txt",
"http_body": "swh-verify=Xk2…",
"expires_at": "2026-05-19T20:00:00Z"
}POST /api/v1/domains/{domain_id}/verify
Bitten Sie den Orchestrator, die Überprüfung tatsächlich auszuführen. method=dns (Standard) führt eine TXT-Abfrage durch; method=http ruft https://<Domain><http_path> auf und vergleicht mit http_body.
curl -X POST https://api.swarmhawk.com/api/v1/domains/{id}/verify \
-H "X-API-Key: swh_…" -H "Content-Type: application/json" \
-d '{"method":"dns"}'
# {"verified":true,"state":"verified","method":"dns"}
# {"verified":false,"state":"pending","method":"dns","detail":"TXT record not found"}Bei verified:true werden sowohl domains.verified_at als auch der Orchestrator-Cache aktualisiert — nachfolgende Scan-/Pentest-/Breach-Aufrufe geben nicht mehr domain_unverified zurück.
POST /api/v1/domains/{domain_id}/scan
Übermitteln Sie einen Angriffsflächen-Scan an den Orchestrator. Keine Domain-Verifizierungsprüfung — jede hinzugefügte Domain ist berechtigt. Business: belastet Wallet/Entitlement pro service_prices.attack_surface. Enterprise: erfasst eine usage_events-Zeile mit effektivem Preis pro Kunde, kein Wallet-Zugriff. Quota +1 bei 201.
Antwort (201)
{
"job_id": "orch-uuid", // poll at GET /api/v1/jobs/{job_id}
"status": "queued",
"domain": "acme.example.com",
"swarmhawk_job_id": "sw-uuid" // internal id, kept for audit
}Fehler: 402 INSUFFICIENT_BALANCE, 403 enterprise_inactive, 429 cooldown (Orchestrator-erzwungenes gemeinsames 24h-Fenster mit Penetrationstests), 503 orchestrator_unavailable.
POST /api/v1/domains/{domain_id}/pentest
Reichen Sie einen KI-Pentest ein. Das optionale rate_profile steuert die Scan-Intensität: stealth (3 rps) · regular (10 rps, Standard) · aggressive (25 rps). Alle anderen Parameter bleiben auf Orchestrator-Standardwerten. Gleiche Wallet-/Gebührenaufteilung wie /scan.
curl -X POST https://api.swarmhawk.com/api/v1/domains/{id}/pentest \
-H "X-API-Key: swh_…" -H "Content-Type: application/json" \
-d '{"rate_profile":"regular"}'
# {"job_id":"…","status":"queued","domain":"…","swarmhawk_job_id":"…"}Gleiche Fehlerfläche wie beim Scan, plus 422 invalid_rate_profile.
POST /api/v1/domains/{domain_id}/breach-intel
Starten Sie einen Darknet-Recherche-Job, der Darknet-Quellen auf Anmeldedaten, Hashes und PII abgleicht, die an diese Domain gebunden sind. Asynchron — gibt sofort eine job_id zurück; rufen Sie GET /api/v1/breach-intel/{job_id} ab, um Status und Ergebnisse zu überwachen. Typische End-to-End-Fertigstellung: 30–90 s. Domain muss verifiziert sein. Business: belastet Wallet/Berechtigung pro service_prices.breach_intel. Enterprise: schreibt eine usage_events-Zeile mit effektivem Kundenpreis, kein Wallet-Zugriff. Kontingent +1 bei akzeptierter Einreichung. Pro-Domain-Abkühlzeit: 7 Tage (Darknet-Fenster des Orchestrators).
Response (202)
{
"job_id": "sw-uuid", // poll GET /api/v1/breach-intel/{job_id}
"orchestrator_job_id": "orch-uuid", // upstream id, kept for audit
"status": "running",
"domain": "acme.example.com",
"billing_source": "wallet" // or "entitlement" | "admin_override" | "enterprise_metered"
}Fehler: 402 INSUFFICIENT_BALANCE, 403 domain_unverified, 403 enterprise_inactive, 409 already_running (ein Job läuft bereits für diese Domain), 429 cooldown (lokales 7-Tage-Fenster), 429 darknet_cooldown_active (Orchestrator-erzwungenes 7-Tage-Fenster mit next_available_at), 502 orchestrator_unavailable, 503 orchestrator_unavailable.
GET /api/v1/breach-intel/{job_id}
Überwachen Sie einen Darknet-Recherche-Job. Eigentümerprüfung durchgeführt; kein Kontingent. Das Backend fragt den Orchestrator träge ab (5 s Drosselung), während die lokale Zeile noch running ist, sodass dieser Endpoint häufig aufgerufen werden kann, ohne den Upstream zu überlasten. Sobald der Job einen Endzustand erreicht (completed | failed | cancelled), geben nachfolgende Aufrufe die zwischengespeicherte Zeile zurück, ohne einen Orchestrator-Roundtrip zu durchlaufen.
Response (200) — running
{
"job_id": "sw-uuid",
"orchestrator_job_id": "orch-uuid",
"domain": "acme.example.com",
"status": "running",
"leak_count": null,
"findings": [],
"pagination": { "page":1, "page_size":50, "total":0, "total_pages":0 },
"error": null,
"billing_source": "wallet",
"requested_at": "2026-05-19T20:23:35Z",
"completed_at": null
}Response (200) — completed
{
"job_id": "sw-uuid",
"domain": "acme.example.com",
"status": "completed",
"leak_count": 4,
"findings": [
{
"id": 2,
"email": "[email protected]",
"username": "alice",
"breach_name": "leakdb",
"breach_date": null,
"has_password": true, // plaintext available via /reveal
"password": { "sha1":"6DD85DDA386874EC…", "encrypted":true },
"risk_level": "high"
}
],
"pagination": { "page":1, "page_size":50, "total":4, "total_pages":1 },
"error": null,
"billing_source": "wallet",
"requested_at": "2026-05-19T20:23:35Z",
"completed_at": "2026-05-19T20:23:43Z"
}Response (200) — failed
{
"job_id": "sw-uuid",
"status": "failed",
"error": "no_data_available", // or "orchestrator_job_not_found" | "orchestrator_failed"
"leak_count": null,
"findings": [],
"billing_source": "wallet",
"requested_at": "2026-05-19T20:23:35Z",
"completed_at": "2026-05-19T20:24:01Z"
}Bei error = "no_data_available" oder "orchestrator_job_not_found" wird der Wallet-/Berechtigungsverbrauch automatisch erstattet — keine Aktion des Aufrufers erforderlich.
POST /api/v1/breach-intel/{job_id}/reveal/{finding_id}
Entschlüsseln Sie ein Klartextpasswort aus einem Darknet-Befund. Nur Eigentümer (mandantenübergreifende Versuche geben 404 zurück — Existenz-privat). Domain muss zum Zeitpunkt des Aufrufs vom Orchestrator verifiziert sein. Klartext wird inline zurückgegeben und ist NIEMALS in SwarmHawks DB persistent; jeder Aufrufe schreibt eine admin_audit_log-Zeile. Keine Kontingentkosten.
Response (200)
{
"plaintext": "Hunter2!",
"revealed_at": "2026-05-19T20:25:10Z"
}Fehler: 403 domain_unverified (Verifizierung seit Scan-Durchführung abgelaufen), 404 finding_not_found (ID nicht Teil dieses Jobs — auch für mandantenübergreifend zurückgegeben), 502 orchestrator_reveal_failed. Nur Befunde mit has_password: true in der GET-Antwort können offenbart werden.
GET /api/v1/jobs/{job_id}
Job-Status-Proxy zum Orchestrator. Die job_id hier ist die vom Orchestrator zurückgegebene ID von POST /scan oder /pentest. Ownership wird serverseitig durchgesetzt — 404 bei Nichtübereinstimmung (Existence-Private). GET = keine Kontingentbelastung.
{
"id": "orch-uuid",
"status": "running", // queued | running | done | failed | cancelled
"created_at": "…",
"updated_at": "…",
"progress_pct": 42, // integer 0–100 (NOT a 0–1 fraction)
"phase": "recon", // free-form server label, display-only
"target": "acme.example.com"
}Progress is reported as progress_pct (integer percentage, 0–100) plus a free-form phase label — both pass through verbatim from the scan engine, so treat unknown phase values as display-only.
Fragen Sie alle 5–10 Sekunden ab, während der status auf queued oder running gesetzt ist. Sobald done erreicht ist, rufen Sie die Ergebnisse / den Bericht unten ab.
GET /api/v1/jobs/{job_id}/findings
Strukturierte Findings-Liste (Schwachstellen, exponierte Services, schwache Konfigurationen, etc.). Wird zurückgegeben, sobald status == 'done'.
Returns a bare JSON array. Each item is emitted verbatim by the scan engine, so treat fields beyond the common ones below as additive.
[
{
"id": "f-1",
"severity": "high", // info | low | medium | high | critical
"title": "Exposed admin panel",
"target": "admin.acme.example.com",
"description": "…"
}
]Errors: 404 findings_not_available if no findings exist for the job yet (still running, or output not enabled for your account); 404 not_found for an unknown / cross-tenant job; 502 api_get_findings_unavailable if the scan service is unreachable.
GET /api/v1/jobs/{job_id}/report
Vollständiger JSON-Bericht (Zusammenfassung für die Geschäftsleitung + Ergebnisse + Empfehlungen). Verfügbar sobald done.
Returns a JSON object wrapping the engine-rendered structured report. The nested report object passes through from the scan engine.
{
"status": "done",
"generated_at": "2026-06-03T09:12:44Z",
"model": "claude-…",
"report": {
"executive_summary": "…",
"findings": [ /* same items as /findings */ ],
"recommendations": [ "…" ]
}
}Errors: 404 report_not_available if the report has not been generated for this job (still running, or report generation not enabled for your account); 502 api_get_report_unavailable if the scan service is unreachable.
GET /api/v1/jobs/{job_id}/report.pdf
Derselbe Bericht als PDF gerendert (Binärstrom mit upstream Content-Disposition). Geeignet für direkte Weitergabe an Ihren Mandanten.
On success returns 200 with Content-Type: application/pdf and the upstream Content-Disposition filename.
PDF generation is not enabled on every account / job type. When no PDF is available you get 404 {"error":"report_not_available"} with a human-readable detail — not a generic 502. A 502 api_get_report_pdf_unavailable means the scan service itself is unreachable (retry with back-off). Fall back to GET …/report (JSON) when you only need the data.
Enterprise-Stufe
Der Enterprise-Plan ist für Hosting-Provider, MSSPs und andere Reseller konzipiert, die SwarmHawk als White-Label-API für viele Mandanten betreiben. Die Anmeldung erfolgt durch Administratoren (kein Self-Service-Checkout) und wird vertraglich vereinbart — kontaktieren Sie den Vertrieb, um zu starten.
Was unterscheidet sich von Business
- Strikte Pro-Kunde-Domain-Obergrenze — Ihr Vertrag legt
max_domainsfest (z. B. 100, 500, 5000); der (N+1)-tePOST /api/v1/domainsgibt403 tier_lockedmitfeature:"domains"und einenlimit/current-Body zurück. - Unbegrenzte API-Aufrufe — Ihr Schlüssel trägt
limit_per_month: null; das monatliche Kontingent, das für Pro/Business gilt, wird umgangen. - Pro-Aufruf-Abrechnung — jeder
Scan,PentestundBreach-Intel-Aufruf wird in einem unveränderlichenusage_events-Log mit dem effektiven kundenspezifischen Preis aufgezeichnet und ist überGET /api/v1/usageabrufbar. Pro-Service-Preise können von einem Administrator vertraglich überschrieben werden (andernfalls wird auf den globalen Tarif zurückgegriffen). - Keine Geldbörse / kein Stripe — Enterprise-Abrechnung erfolgt außerhalb der Plattform in einem monatlichen Rechnungszyklus. Ihr Reseller-Wallet-Saldo ist irrelevant.
- Nur API — Enterprise-Kunden melden sich nicht am Dashboard an. Der Vertrieb übergibt Ihren Bearer Key außerhalb des Systems; alles Nachfolgende funktioniert mit
X-API-Key: swh_….
Verfügbare Endpunkte
Enterprise-Kunden nutzen die bestehende Business /api/v1/* Oberfläche plus die neue GET /api/v1/usage:
POST /api/v1/keys,GET /api/v1/keys— Zeigen Sie Ihre eigenen Schlüsselmetadaten an (der Klartextschlüssel wird nur einmal bei der Registrierung/Erneuerung angezeigt).POST /api/v1/domains— unterliegt der kundenspezifischenmax_domains-Obergrenze.POST /api/v1/domains/{id}/verifyPOST /api/v1/domains/{id}/scanPOST /api/v1/domains/{id}/pentestPOST /api/v1/domains/{id}/breach-intel·GET /api/v1/breach-intel/{job_id}GET /api/v1/usage— Nur für Enterprise (siehe unten).
GET /api/v1/usage
Pro-Domain-Nutzungsaggregate für einen Enterprise-Kunden in einem bestimmten monatlichen Abrechnungszeitraum. Verwenden Sie dies, um Ihre monatliche Rechnung abzustimmen oder um Ihre eigenen Mandanten pro Domain abzurechnen.
Abfrageparameter
| Name | Typ | Standard | Beschreibung |
|---|---|---|---|
| period | string | aktueller Monat | Format YYYY-MM. Wird übersetzt zu [YYYY-MM-01, nächster-Monat-01) UTC. Ungültige Werte geben 400 invalid_period zurück. |
Beispiel
curl https://api.swarmhawk.com/api/v1/usage?period=2026-05 \
-H "X-API-Key: swh_…"Antwort
{
"period": "2026-05",
"currency": "USD",
"domains": [
{
"domain_id": "d1-uuid",
"domain": "acme.example.com",
"scans_count": 12,
"pentests_count": 3,
"breach_lookups_count": 8,
"total_cost_usd": 234.50
}
],
"totals": {
"scans_count": 47,
"pentests_count": 11,
"breach_lookups_count": 22,
"total_cost_usd": 1284.75
}
}Hinweise
- Das
domains-Array enthält nur Domains mit mindestens einem Ereignis im angegebenen Zeitraum. Domains in Ihrem Besitz, die in diesem Monat nicht verwendet wurden, werden weggelassen — fragen SieGET /api/v1/domainsab, um den vollständigen Bestand zu erhalten. - If a domain is deleted between the event and the query, its row still appears with
domain_id: nullanddomain: "<deleted>"— the audit trail is preserved. - Die Kosten spiegeln den effektiven Preis pro Aufruf zum Zeitpunkt des Ereignisses wider: kundenspezifische Vertragsüberschreibung, falls festgelegt, andernfalls der globale Service-Preise-Tarif.
- 403
enterprise_onlywird an jeden Non-Enterprise-Tarif zurückgegeben, der diesen Endpunkt aufruft.
Deaktivierungsverhalten
Wenn Ihr Enterprise-Konto von einem Administrator pausiert wird (Zahlungsausfall, Vertragsende usw.), gibt jeder /api/v1/*-Aufruf — Lese- und Schreibvorgänge — folgende Antwort zurück:
HTTP 403 { "detail": { "error": "enterprise_inactive" } }
Der API-Schlüssel wird nicht widerrufen (daher stellt die Reaktivierung den Zugriff wieder her, ohne Schlüssel neu auszustellen), und historische usage_events + domains bleiben erhalten. Kontaktieren Sie den Vertrieb zur Reaktivierung.
Python SDK
Das SwarmHawk Python SDK bietet Sicherheitsplattformen eine saubere programmatische Schnittstelle zum Abrufen von Findings, zur Konfiguration von Push-Integrationen und zum Verbrauch von STIX 2.1 Bundles — ohne rohes HTTP erforderlich.
SDK-Methoden
| Methode | Beschreibung | Rückgabewerte |
|---|---|---|
domains(min_risk, country, limit, offset) | Paginierte Scan-Ergebnisse | list[dict] |
domain(name) | Vollständige Details einer einzelnen Domain | dict |
alerts(min_risk, since, limit) | Hochrisiko-Befunde, optional seit datetime | list[dict] |
iter_alerts(min_risk, page_size) | Generator — durchsucht automatisch alle Ergebnisse | Iterator[dict] |
stix_bundle(min_risk, limit) | STIX 2.1-Bundle vom /taxii-Endpunkt | dict |
integrations() | Konfigurierte Push-Integrationen auflisten | list[dict] |
configure_integration(service, config) | Integrationsanmeldedaten speichern | dict |
test_integration(service, config) | Konnektivität testen ohne zu speichern | {ok, message} |
Integrations-API
INTEGRATIONS_ENABLED=false (Standard der Plattform) gibt jeder /integrations*-Endpunkt HTTP 410 { "error": "feature_disabled" } zurück. Kontaktieren Sie [email protected], wenn Sie dies für Ihr Konto reaktivieren müssen.Wenn aktiviert, konfigurieren Sie Push-Integrationen, damit SwarmHawk kritische Erkenntnisse automatisch an Ihre Security-Plattformen sendet, sobald sie erkannt werden (Risiko ≥ 70).
GET /integrationen
Listet alle konfigurierten Integrationen für den authentifizierten Benutzer auf. Secrets sind maskiert.
POST /integrationen/{service}
Integrationskonfiguration speichern oder aktualisieren. service ist einer von: splunk · sentinel · crowdstrike · gravityzone · cortex · jira · servicenow · webhook · stix
POST /integrations/{service}/test
Testen Sie die Konnektivität ohne zu speichern. Gibt {"ok": true, "message": "..."} zurück
DEL /integrationen/{service}
Integrationskonfiguration entfernen.
Unterstützte Dienste
| Service | Authentifizierungsmethode | Auslöser | Payload-Typ |
|---|---|---|---|
| splunk | HEC-Token | Risiko ≥ 70 | CIM-konformes JSON-Event |
| sentinel | Workspace SharedKey HMAC | Risiko ≥ 70 | Flache KQL-bereite Felder (_s/_d/_b) |
| crowdstrike | OAuth2-Client-Anmeldedaten | Risiko ≥ 70 | IOC (type=Domain, action=detect/prevent) |
| gravityzone | Bearer-Zugangsschlüssel | Risiko ≥ 70 | JSON-RPC createCustomRule |
| cortex | SHA-256 HMAC (api_key_id/nonce/ts) | Risiko ≥ 70 | Externe Warnung mit MITRE-Tags |
| jira | Basic (E-Mail:API-Token) | Risiko ≥ 70 UND CVSS ≥ 7 | ADF-formatiertes Issue mit CVE-/Software-Tabellen |
| servicenow | Basic (Benutzer:Passwort) | Risiko ≥ 70 | Incident mit Mapping von Dringlichkeit/Auswirkung/SLA |
| webhook | Optionale HMAC-SHA256-Signatur | Risiko ≥ 70 | Angereicherte JSON-Nutzlast |
| stix | Bearer (gelesen via /taxii) | Pull-basiert | STIX 2.1 DomainName + Vulnerability-Objekte |
STIX / TAXII 2.1
SwarmHawk stellt einen TAXII-2.1-konformen Endpoint bereit. Verbinden Sie jede Threat-Intelligence-Plattform (OpenCTI, MISP, ThreatConnect, Anomali), um SwarmHawk-Ergebnisse als STIX-2.1-Objekte abzurufen.
GET /taxii/collections/
TAXII-Erkennungsendpunkt — gibt Sammlungsmetadaten zurück.
GET /taxii/collections/swarmhawk/objects/
Gibt ein STIX 2.1-Bundle Ihrer Domänen mit hohem Risiko als domain-name-, vulnerability- und relationship-Objekte zurück.
| Parameter | Standard | Beschreibung |
|---|---|---|
| min_risk | 70 | Minimale Risikobewertung (0–100) |
| limit | 100 | Max. Objekte (1–500) |
Zurückgegebene STIX-Objekttypen
| Typ | Inhalt |
|---|---|
| domain-name | Domain-Wert, Risikobewertung, Priorität, Land |
| vulnerability | CVE-ID, CVSS-Score, Beschreibung |
| relationship | Domain-Name → related-to → Sicherheitslücke |
Alle Objekt-IDs sind deterministisch (UUID5) — dieselbe Domain erzeugt immer dieselbe STIX-ID über Bundle-Generierungen hinweg, was eine ordnungsgemäße Deduplizierung in nachgelagerten TIPs ermöglicht.
Adapter-Skripte
Eigenständige Python-Skripte für Plattformen, auf denen Sie einen geplanten Pull (cron / Lambda / Azure Function) dem Always-On-Push-Connector vorziehen. Jedes Skript ruft SwarmHawk-Warnungen ab und übermittelt sie in einem Durchlauf an die Zielplattform.
pip install httpx und akzeptieren sowohl CLI-Flags als auch Umgebungsvariablen.| Plattform | Skript | Minimales Risiko (Standard) | Herunterladen |
|---|---|---|---|
| Splunk SIEM | splunk_ta.py |
70 | ↓ splunk_ta.py |
| Microsoft Sentinel | sentinel_connector.py |
70 | ↓ sentinel_connector.py |
| CrowdStrike Falcon | crowdstrike_adapter.py |
80 | ↓ crowdstrike_adapter.py |
| Bitdefender GravityZone | gravityzone_adapter.py |
80 | ↓ gravityzone_adapter.py |
| Palo Alto Cortex XDR | cortex_adapter.py |
75 | ↓ cortex_adapter.py |
| Jira | jira_adapter.py |
70 + cvss ≥ 7 | ↓ jira_adapter.py |
| ServiceNow | servicenow_adapter.py |
70 | ↓ servicenow_adapter.py |
sdk/adapters/ verfügbar.Splunk TA Adapter
| Flagge | Umgebungsvariable | Beschreibung |
|---|---|---|
| --api-key | SWARMHAWK_API_KEY | SwarmHawk-API-Schlüssel |
| --min-risk | SWARMHAWK_MIN_RISK | Minimale Risikobewertung (Standard: 70) |
| --base-url | SWARMHAWK_BASE_URL | API-Basis-URL |
| --index | SWARMHAWK_SPLUNK_INDEX | Splunk-Indexname (Standard: main) |
Gibt sourcetype=swarmhawk:scan-Events mit CIM-kompatiblen Feldern aus: dest, vendor_product, category, severity.
Microsoft Sentinel Adapter
| Kennzeichnung | Umgebungsvariable | Beschreibung |
|---|---|---|
| --workspace-id | AZURE_WORKSPACE_ID | Log Analytics-Workspace-ID |
| --shared-key | AZURE_SHARED_KEY | Primärer oder sekundärer gemeinsamer Schlüssel |
| --log-type | AZURE_LOG_TYPE | Benutzerdefinierter Tabellenname (Standard: SwarmHawk) |
| --min-risk | SWARMHAWK_MIN_RISK | Minimale Risikobewertung (Standard: 70) |
Daten landen in der benutzerdefinierten Tabelle SwarmHawk_CL. KQL-Beispiel: SwarmHawk_CL | where RiskScore_d >= 80 | sort by TimeGenerated desc
CrowdStrike Falcon Adapter
| Flagge | Umgebungsvariable | Beschreibung |
|---|---|---|
| --cs-client-id | CS_CLIENT_ID | Falcon-API-Client-ID |
| --cs-client-secret | CS_CLIENT_SECRET | Falcon-API-Client-Secret |
| --cs-base-url | CS_BASE_URL | Falcon-Basis-URL (Standard: api.crowdstrike.com) |
| --min-risk | SWARMHAWK_MIN_RISK | Minimale Risikobewertung (Standard: 80) |
Pushed Domains als IOCs (type=domain) in Batches von 200. Aktion ist prevent für bestätigte Malware/Phishing, detect für CVE-Exposition.
Bitdefender GravityZone Adapter
| Flagge | Umgebungsvariable | Beschreibung |
|---|---|---|
| --gz-api-url | GZ_API_URL | GravityZone JSON-RPC-Endpunkt |
| --gz-access-key | GZ_ACCESS_KEY | GravityZone API-Zugriffscode |
| --gz-company-id | GZ_COMPANY_ID | Unternehmens-/Mandanten-ID |
| --min-risk | SWARMHAWK_MIN_RISK | Minimale Risikobewertung (Standard: 80) |
Erstellt benutzerdefinierte Netzwerkregeln über createCustomRule. Aktion ist block für Malware/Phishing, report für CVE-Exposures.
Palo Alto Cortex XDR Adapter
| Flagge | Umgebungsvariable | Beschreibung |
|---|---|---|
| --xdr-api-key | XDR_API_KEY | Cortex XDR API-Schlüssel |
| --xdr-api-key-id | XDR_API_KEY_ID | Numerische API-Schlüssel-ID |
| --xdr-fqdn | XDR_FQDN | Ihr Tenant-FQDN (ohne https://api-) |
| --min-risk | SWARMHAWK_MIN_RISK | Mindestrisikoscore (Standard: 75) |
Sendet externe Warnungen mit MITRE ATT&CK-Technik-Tags (T1566, T1190, T1046, T1557…). Batches zu je 100 pro API-Aufruf.
Jira-Adapter
| Kennzeichnen | Umgebungsvariable | Beschreibung |
|---|---|---|
| --jira-base-url | JIRA_BASE_URL | Atlassian Cloud URL |
| --jira-email | JIRA_EMAIL | Atlassian-Konto-E-Mail |
| --jira-token | JIRA_TOKEN | Atlassian API-Token (id.atlassian.com → Sicherheit) |
| --jira-project | JIRA_PROJECT | Projektschlüssel (Standard: SEC) |
| --jira-issue-type | JIRA_ISSUE_TYPE | Problemtyp (Standard: Bug) |
| --min-cvss | SWARMHAWK_MIN_CVSS | Minimale CVSS zum Erstellen eines Tickets (Standard: 7,0) |
Erstellt strukturierte ADF-Issues mit Risikozusammenfassung, CVE-Findings, Software-Stack, fehlgeschlagene Checks, Remediations-Punkte und NIS2-Label. Wird nur ausgelöst, wenn Risiko ≥ 70 UND CVSS ≥ min_cvss, um Ticket-Spam zu vermeiden.
ServiceNow-Adapter
| Flagge | Umgebungsvariable | Beschreibung |
|---|---|---|
| --snow-instance | SNOW_INSTANCE | ServiceNow-Instanz-Subdomain (ohne .service-now.com) |
| --snow-user | SNOW_USER | ServiceNow-Benutzername |
| --snow-password | SNOW_PASSWORD | ServiceNow-Passwort |
| --snow-table | SNOW_TABLE | Zieltabelle (Standard: incident) |
| --min-risk | SWARMHAWK_MIN_RISK | Minimale Risikobewertung (Standard: 70) |
| Priorität | Dringlichkeit | Auswirkung | SLA-Ziel |
|---|---|---|---|
| CRITICAL | 1 | 1 | 4 Stunden |
| HIGH | 1 | 2 | 24 Stunden |
| MEDIUM | 2 | 2 | 7 Tage |
| LOW / INFO | 3 | 3 | 30 Tage |
Antwortobjekte
Objekt prüfen
| Feld | Typ | Beschreibung |
|---|---|---|
| check | string | Check-Kennung (siehe Check-Namen unten) |
| status | string | ok · warning · critical · locked |
| title | string | Einfache, verständliche Beschreibung des Befunds |
| detail | string | Vollständige Erklärung mit Nachweisen |
| score_impact | number | Punkte, die zur Risikobewertung hinzugefügt werden (0–40) |
Interpretation des Risiko-Scores
| Bewertung | Stufe | Bedeutung |
|---|---|---|
| 0 – 29 | NIEDRIGES RISIKO | Gute Sicherheitslage, geringfügige Probleme |
| 30 – 59 | MITTLERES RISIKO | Bemerkenswerte Probleme, die Aufmerksamkeit erfordern |
| 60 – 100 | HOHES RISIKO | Kritische Befunde, sofortige Maßnahmen erforderlich |
Namen überprüfen
Jeder Eintrag im checks[]-Array eines Scan-Berichts trägt eine check-Kennung. Die vollständige Liste der Kennungen, die der Scanner heute ausgibt (Quelle: backend/scanhawk_translator.py + backend/post_scan_processor.py):
| Prüfung | Gruppe | Beschreibung |
|---|---|---|
tls_protocol | TLS | Ausgehandelte TLS-Version (kennzeichnet TLS < 1.2) |
tls_cipher | TLS | Schwache Cipher-Suites |
tls_cert_expiry | TLS | Zertifikatablauf / bereits abgelaufen |
tls_self_signed | TLS | Selbstsigniertes Zertifikat |
tls_handshake | TLS | TLS-Handshake-Fehler |
email_dmarc | DMARC fehlt oder ist schwach (p=none) | |
mx_blacklist | MX-Host auf einer öffentlichen Blocklist | |
blacklist | Reputation | Domain oder A-Record auf einer öffentlichen Blocklist (Spamhaus / URLhaus / Safe Browsing) |
ip_reputation | Reputation | Hosting-IP-Reputation / Geo / ASN-Signale |
cve_match | Vulns | Software-Fingerprint mit bekannten CVEs abgeglichen (CVSS + KEV + EPSS) |
exposed_git | Exposure | Öffentliches /.git/ Verzeichnis |
exposed_env | Exposure | Öffentliche .env-Datei |
mixed_content | Web | HTTPS-Seite lädt HTTP-Unterressourcen |
sri_missing | Web | Subresource Integrity fehlt bei Third-Party-Scripts |
cookies_secure | Web | Cookies fehlen Secure / HttpOnly / SameSite |
takeover_risk | DNS | Verwaiste Subdomain / Übernahmekandidatin |
security_txt | Hygiene | Fehlende /.well-known/security.txt (RFC 9116) |
whois_privacy | Hygiene | WHOIS-Datenschutz aktiviert / deaktiviert |
ai_summary | Reporting | KI-generierte Bedrohungsanalyse (nur für bezahlte Nutzer) |
Granulare Checks (z.B. tls_protocol, tls_cipher) werden im Dashboard unter übergeordneten Kategorien (TLS, DNS, Header, etc.) gruppiert. Der PDF-Report nutzt zusätzliche benutzerfreundliche Bezeichnungen (siehe backend/main.py:CHECK_LABELS), aber die JSON-Identifizierer oben sind die kanonische Attack Surface.
Holen Sie sich Ihren kostenlosen API-Schlüssel unter www.swarmhawk.com → Anmelden → Konto → API-Schlüssel
Kostenlosen API-Schlüssel erhalten →Live ausprobieren
Full interactive API explorer — execute real requests against the SwarmHawk API directly from your browser. Paste your API key into the Authorize button to unlock authenticated endpoints.