SwarmHawk API
SwarmHawk API vám umožňuje programový prístup k 27 automatizovaným bezpečnostným skúškam a 3000+ aktívnym šablónam CVE nástroja nuclei — SSL, DNS, CVE s potvrdeným aktívnym exploitom, vystavenie pri breach, typosquatting, analýza hrozieb AI a ďalšie — pre ľubovoľnú doménu. Používajte ho na budovanie bezpečnostných workfloov, automatizáciu due diligence alebo integráciu SwarmHawk do vlastnej platformy.
Existujú dve API plochy:
/api/v2— starší surface s autentifikáciou session/JWT používaný dashboardom. Väčšina operácií čítania a zápisu je dostupná aj tu z dôvodu kompatibility./api/v1— moderné verejné API pre Business / Enterprise, zabezpečené pomocou bearer API kľúčov (swh_…). Toto je cieľ pre nové integrácie.
Content-Type: application/json.Rýchly štart — skenujem doménu za 30 sekúnd
# 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}`);
Autentifikácia
SwarmHawk používa dve metódy autentifikácie v závislosti od koncového bodu:
| Metóda | Záhlavie | Používané pre |
|---|---|---|
| API kľúč (Bearer) | Authorization: Bearer swh_… | /api/v1/* verejné Business / Enterprise API |
| Relácia JWT | Authorization: Bearer <jwt> | /api/v2/* a koncové body dashboardu (autentifikovaní používatelia) |
| Žiadny | — | /public-scan, /health |
Formát API kľúča
swh_3f8a2b1c4d5e6f7a8b9c0d1e2f3a4b5c
Chyby a limity sadzby
HTTP stavové kódy
| Kód | Význam |
|---|---|
| 200 | Úspech |
| 400 | Chybný požiadavok — skontrolujte telo vašej požiadavky |
| 401 | Chýbajúci alebo neplatný API kľúč / token relácie |
| 403 | Zakázané — táto funkcia vyžaduje platenú verziu |
| 429 | Limit požiadaviek prekročený |
| 500 | Chyba servera — skúste znova za 30 sekúnd |
Tvar chybovej odpovede
{
"detail": "Invalid API key"
}Limity rýchlosti
| Plán | Limit |
|---|---|
| Free | Kľúče API nie sú dostupné; používajte dashboard alebo /public-scan |
| Business | Predvolená kvóta na účet s možnosťou doplátiť si dodatočné kredity |
| Enterprise | Vlastné limity dohodnuté podľa zmluvy |
| /public-scan | Nie je potrebný kľúč · obmedzené podľa IP adresy |
Skenovať doménu
Neexistuje žiadny jednotný endpoint "jednorazového skenu". Ak chcete skenovať doménu cez API:
- Pridajte (a overte) doménu pomocou
POST /api/v1/domains— prvá kontrola sa automaticky zaradí do frontu. - Ak chcete znova skenovat už pridanú doménu, zavolajte
POST /api/v1/domains/{domain_id}/scan. - Dotazujte sa na stav cez
GET /api/v1/jobs/{job_id}a na najnovšie výsledky cezGET /api/v2/domains/{domain_id}/report. - Pre jednorazové anonymné skeny bez účtu použite
POST /public-scan(s obmedzenou frekvenciou, výsledky sa neuchovávajú).
POST /public-scan
Anonymný scan — nevyžaduje sa API kľúč. Vracia podmnožinu kontrol s niektorými výsledkami uzamknutými. Použite to na demo alebo embedy. Výsledky nie sú uložené.
| Pole | Typ | Popis |
|---|---|---|
| domain | string | Doména na skenovanie |
{
"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
Rýchla pasívna skúška — detekuje software stack a kontroluje známe CVE bez plnej skúšky. Odpoveď za ~3 sekundy. Výsledok sa neukladá.
{
"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"
}priorita: KRITICKÁ (cvss ≥ 9) · VYSOKÁ (≥ 7) · STREDNÁ (≥ 4) · NÍZKA. Ak je upstream flota skánerov nedostupná, endpoint vráti prázdny formát výsledku namiesto 5xx chyby.
GET /api/v2/domains
Vypíšte všetky domény vo vašom účte s ich najnovšími skóre rizika a kontrolami.
{
"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
Pridajte doménu na svoj účet a zaraďte jej do frontu na skenování na pozadí.
| Pole | Typ | Popis |
|---|---|---|
| domain | string | Doména na pridanie, napríklad "mycompany.cz" |
| country | string | ISO kód krajiny (voliteľne — automaticky zistený z TLD) |
{
"id": "uuid",
"domain": "mycompany.cz",
"status": "scanning",
"message": "Domain added — scan starting now"
}GET /api/v2/domains/{domain_id}/report
Získajte najnovšiu úplnú správu skúšky pre doménu. Bezplatní používatelia vidí podmnožinu; platení používatelia vidia všetkých 27 skúšok vrátane validácie aktívnych CVE nástroja nuclei a zhrnutia AI.
{
"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
}
]
}Každý objekt kontroly teraz obsahuje pole confidence: "confirmed" (skórované) alebo "informational" (nulová penalizácia, iba povrchový indikátor). Informatívne zistenia sa nikdy nezapočítavajú do warnings ani critical.
GET /domains/{domain_id}/verify-token
Vráťte živú výzvu vlastníctva vydanú orchestrátorom verifikácie. SwarmHawk podporuje dve metódy verifikácie — DNS TXT záznam alebo HTTP upload súboru. Zavolajte POST /domains/{domain_id}/verify s method: "dns" alebo "http" po publikovaní záznamu/súboru.
{
"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."
}
]
}Položka metódy HTTP je prítomná iba vtedy, keď orchestrátor vydal výzvu http_path. Ak je orchestrátor nedostupný, koncový bod vráti 503 no_verification_orchestrator.
POST /domains/{domain_id}/verify
Požiadajte orchestrátor o potvrdenie vlastníctva pomocou vybranej metódy. Pri úspešnom overení sa domains.verified_at zapíše a vráti v následných odpovediach správ. Orchestrátor si ukladá pozitívne overenia do vyrovnávacej pamäte na 7 dní.
Telo požiadavky (voliteľné, predvolená hodnota dns):
{ "method": "dns" } // or "http"Úspešná odpoveď:
{ "verified": true, "method": "dns" }Odpoveď zatiaľ nenájdená:
{ "verified": false, "state": "pending", "method": "dns", "detail": "DNS-TXT record not found yet" }GET /api/v2/domains/{domain_id}/história
Trend skóre rizika v čase — užitočný na vytváranie dashboardov alebo upozorňovania na zvýšenie skóre.
{
"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
Mapovať zistenia skenu na články NIS2 Direktívy. Vracia skóre zhody a stav podľa článku — vhodné ako dôkaz auditu pre regulačné orgány.
{
"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
Vytvorte briefing hrozieb poháňaný AI pre váš portfólio domén pomocou Claude. Vracia štruktúrovaný briefing s výkonným zhrnutím, kritickými zisteniami a prioritami nápravy.
| Pole | Typ | Popis |
|---|---|---|
| domains | string | Oddelené čiarkami: "example.com (risk:42), other.cz (risk:18)" |
| date | string | Dnešný dátum, napr. "10. marca 2025" |
{
"text": "## Executive Summary\n\nYour domain portfolio shows...",
"briefing": "…"
}POST /api/v2/keys
Vytvorte nový kľúč API pre vašu účet. Vracia všetky kľúče vrátane nového.
{
"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
Vypíšte všetky API kľúče a ich využitie za aktuálny mesiac.
curl https://api.swarmhawk.com/api/v2/keys \
-H "Authorization: Bearer YOUR_SESSION_TOKEN"DELETE /api/v2/keys/{key}
Okamžite zrušte kľúč API. Všetky budúce požiadavky s týmto kľúčom budú odmietnuté.
{ "revoked": "swh_3f8a2b1c…" }Business / Enterprise API — /api/v1
Plocha /api/v1/* je produkčné API na zápis používané zákazníkmi Business a Enterprise. Každý endpoint nižšie akceptuje buď X-API-Key: swh_… (odporúčané pre komunikáciu server-to-server) alebo Authorization: Bearer <jwt> (pre interné nástroje).
Vrstvové brány
- Zadarmo — Prístup k API odmietnutý (
403 API_ACCESS_REQUIRED). - Pro — 10-hodinová skúšobná verzia len na čítanie. Koncové body zápisu vracajú
403 business_required. - Business — 500 hovorov/mesiac, debet peňaženky/oprávnenia za sken/pentest/únik.
- Enterprise — neobmedzené volania; administrátorská registrácia s limitom
max_domainsna zákazníka a meraním podľa volania (detaily).
Typický tok predajcu
# 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
Vydajte kľúč API pre aktuálneho používateľa. Business: jeden kľúč, 500 volaní/mesiac. Enterprise: jeden kľúč, bez limitu (spravovaný správcom cez /admin/api/v1/enterprise/*). Iba Bearer JWT — nemôžete si spustiť svoj prvý kľúč sám sebou; vstupným bodom je prihlásenie na paneli (alebo enrolácia správcom pre Enterprise).
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
Zoznam aktívnych kľúčov + využitie v aktuálnom mesiaci. Obyčajný text sa nikdy znova nezobrazuje. Iba Bearer JWT — na endpointy správy kľúčov nie je možné pristúpiť pomocou API kľúča.
{ "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
Zrušiť existujúci kľúč a vydať nový. Nový otvorený text sa zobrazí raz v odpovedi — predchádzajúci kľúč prestane pracovať okamžite. Iba Bearer JWT.
DELETE /api/v1/keys/{key_id}
Zrušiť kľúč. Idempotentné. Iba Bearer JWT.
GET /api/v1/domains
Zoznam domén volajúceho. Stránkovaný; podporuje ?limit a ?offset.
POST /api/v1/domains
Pridajte doménu a automaticky inicializujte overovanie orchestrátora. Vráti DNS-TXT challenge bezprostredne, aby ste ho mohli poskytnúť svojmu tenantovi bez ďalšieho volania. Bezplatne pre zákazníka — pridávanie domén neodpočítava z peňaženky.
Telo
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
| domain | string | yes | 4–253 znakov, malými písmenami. |
| country | string | — | ISO 3166-1 alpha-2. Automaticky odvodené z TLD, ak chýba. |
| industry | string | — | Voľne formátovaný štítok na zoskupovanie a hlásenie. |
| primary_contact | string | — | Email pre smerovanie porušení bezpečnosti/upozornení. |
Odpoveď (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"
}
}Chyby: 403 tier_locked pri limite; 409 domain_already_added pri duplicite; 422 invalid_domain.
GET /api/v1/domains/{domain_id}
Detaily jednej domény: risk_score, last_scanned_at, verified_at, krajina, atď. 404 pri nezhode.
PATCH /api/v1/domains/{domain_id}
Prepínajte auto_rescan_enabled pre doménu (jedinou upraviteľné pole na tomto endpointe v súčasnosti). Povolenie vyžaduje tier Pro alebo vyšší (feature gate daily_rescan); vypnutie je vždy povolené. Ak chcete zmeniť industry, primary_contact alebo country, odstráňte a znova pridajte doménu.
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}
Trvalé vymazanie domény. Riadok, jej stav verifikácie a všetky súvisiace záznamy úloh sú odstránené. Uvoľňuje slot v rámci limitu úrovne. Kvóta +1.
POST /api/v1/domains/bulk-import
Multipart nahrávanie CSV — každý riadok je doména,krajina (krajina je povinná, 2-písmenový kód ISO). Prvý riadok môže byť hlavička doména,krajina — je preskočený. Rešpektuje limit pre každého zákazníka; riadky, ktoré limit prekročia, skončia v zozname rejected s dôvodom quota exceeded. Kvóta +1 na volanie (nie na riadok).
Vracia {accepted: [...], rejected: [...]}. Dostupné na úrovniach Business + Enterprise (funkcia: bulk_import).
GET /api/v1/domains/{domain_id}/history
Chronologicky usporiadaný zoznam predchádzajúcich skanov + zmeny kontrol pre doménu.
GET /api/v1/domains/{domain_id}/verification
Iba na čítanie dostupné načítanie aktuálneho stavu autorizačnej výzvy z orchestrátora (DNS + HTTP cesta + hodnoty záznamov + čas vypršania). Použite toto, ak potrebujete znova zobraziť výzvu po stratení pôvodnej odpovede POST /api/v1/domains.
{
"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
Požiadajte orchestrátor, aby skutočne spustil kontrolu. method=dns (predvolené nastavenie) vykonáva vyhľadávanie TXT záznamu; method=http načíta https://<doména><http_cesta> a porovná s http_telo.
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"}Pri verified:true sú domains.verified_at aj cache orchestrátora prepnuté — následné volania scan/pentest/breach už nevracajú domain_unverified.
POST /api/v1/domains/{domain_id}/scan
Odošlite skenovanie povrchu útokov orchestrátoru. Bez overenia domény — ktorákoľvek pridaná doména je oprávnená. Business: odpisy peňaženky/oprávnenia podľa service_prices.attack_surface. Enterprise: zaznamenáva riadok usage_events s efektívnou cenou na zákazníka, bez dotyku peňaženky. Kvóta +1 pri 201.
Odpoveď (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
}Chyby: 402 INSUFFICIENT_BALANCE, 403 enterprise_inactive, 429 cooldown (spoločné 24h okno vynucované orchestrátorom s penetračným testom), 503 orchestrator_unavailable.
POST /api/v1/domains/{domain_id}/pentest
Odošlite AI pentest. Voliteľný parameter rate_profile kontroluje agresivitu skanu: stealth (3 rps) · regular (10 rps, predvolené) · aggressive (25 rps). Všetky ostatné parametre zostávajú na predvolených hodnotách orchestrátora. Rovnaké rozdelenie peňaženky/merania ako /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":"…"}Rovnaký error surface ako scan, plus 422 invalid_rate_profile.
POST /api/v1/domains/{domain_id}/breach-intel
Spustite úlohu výskumu darknet, ktorá skontroluje zdroje darknet na poverenia, hashe a osobné údaje viazané na túto doménu. Asynchronne — okamžite vracia job_id; dotazujte GET /api/v1/breach-intel/{job_id} na stav a zistenia. Typické end-to-end dokončenie je 30–90 s. Doména musí byť overená. Business: odpíše peňaženku/oprávnenie podľa service_prices.breach_intel. Enterprise: zaznamenáva riadok usage_events s efektívnou cenou na zákazníka, bez dotyku peňaženky. Kvóta +1 pri prijatom odoslaní. Cooldown na doménu: 7 dní (okno darknet orchestrátora).
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"
}Chyby: 402 INSUFFICIENT_BALANCE, 403 domain_unverified, 403 enterprise_inactive, 409 already_running (úloha je už prebiehajúca pre túto doménu), 429 cooldown (lokálne okno 7 dní), 429 darknet_cooldown_active (okno 7 dní vynútené orchestrátorom s next_available_at), 502 orchestrator_unavailable, 503 orchestrator_unavailable.
GET /api/v1/breach-intel/{job_id}
Dotazujte úlohu výskumu darknet. Skontrolované vlastníctvo; žiadna kvóta. Backend lenivo dotazuje orchestrátora (škrtenie 5 s) zatiaľ čo je lokálny riadok stále running, takže tento endpoint sa dá volať často bez zaplavenia upstream. Keď sa úloha dostane do terminálneho stavu (completed | failed | cancelled), nasledujúce volania vrátia uložený riadok bez akéhokoľvek round-trip orchestrátora.
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"
}Pri error = "no_data_available" alebo "orchestrator_job_not_found" sa spotreba peňaženky/oprávnenia automaticky vracia — nie je potrebná žiadna akcia od volajúceho.
POST /api/v1/breach-intel/{job_id}/reveal/{finding_id}
Dešifrujte jedno heslo v čistom texte zo zistenia darknet. Len vlastník (pokusy cross-tenant vrátia 404 — existencia-privátna). Doména musí byť v čase volania stále overená orchestrátorom. Čistý text je vrátený inline a nikdy sa NEpersistuje v SwarmHawk DB; každé volanie zapíše jeden riadok admin_audit_log. Bez nákladov na kvótu.
Response (200)
{
"plaintext": "Hunter2!",
"revealed_at": "2026-05-19T20:25:10Z"
}Chyby: 403 domain_unverified (overenie vypršalo od doby, keď skenovanie prebehlo), 404 finding_not_found (id nie je súčasť tejto úlohy — vrátené aj pre cross-tenant), 502 orchestrator_reveal_failed. Iba zistenia s has_password: true v GET odpovedi je možné odhaliť.
GET /api/v1/jobs/{job_id}
Proxy stavu úlohy orchestrátoru. job_id je tu identifikátor orchestrátoru vrátený pomocou POST /scan alebo /pentest. Vlastníctvo je vynútené na strane servera — 404 pri neshode (existencia-privátna). GET = bez kvóty.
{
"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.
Dotazujte sa každých 5–10 sekúnd, kým je status queued alebo running. Keď je done, načítajte nižšie uvedené zistenia / správu.
GET /api/v1/jobs/{job_id}/findings
Štruktúrovaný zoznam zistení (zraniteľnosti, exponované služby, slabé konfigurácie atď.). Vrátený po 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
Úplná JSON správa (zhrnutie pre vedenie + zistenia + odporúčania). Dostupná po 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
Rovnaká správa vykreslená ako PDF (binárny tok s upstream Content-Disposition). Vhodné na priamu redistribúciu vašemu nájomcovi.
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.
Podniková úroveň
Úroveň Enterprise je určená pre poskytovateľov hostingu, MSSP a ďalších predajcov, ktorí prevádzkujú SwarmHawk ako white-label API v prospech mnohých tenantov. Vyžaduje registráciu správcu (bez samoobslužného nákupu) a zmluvnú dohodu — kontaktujte obchodný tím pre zaradenie.
Čo je iné oproti Business
- Pevný limit domén na zákazníka — vaša zmluva nastavuje
max_domains(napr. 100, 500, 5000); (N+1)-tyPOST /api/v1/domainsvráti403 tier_lockedsfeature:"domains"a telom slimit/current. - Neobmedzené API volania — váš kľúč má nastavené
limit_per_month: null; mesačná kvóta platná pre Pro/Business je obídená. - Metriky na základe volaní — každé volanie
scan,pentestabreach-intelje zaznamenané v nezmeneniteľnom protokoleusage_eventss efektívnou cenou na zákazníka, ktorú je možné získať prostredníctvomGET /api/v1/usage. Ceny jednotlivých služieb je možné administrátorom prepísať v zmluve (inak sa používajú globálne cenové tabuľky). - Bez peňaženky / bez Stripe — Faktúrácia Enterprise prebieha mimo platformy s mesačným cyklom faktúr. Zostatok peňaženky vášho resellera je irelevantný.
- Iba API — Podnikoví zákazníci sa neprihlasujú do ovládacieho panela. Predajný tím vám odovzdá kľúč nosiča mimo pásma; všetko nižšie funguje s
X-API-Key: swh_….
Dostupné koncové body
Zákazníci Enterprise používajú existujúci Business /api/v1/* povrch plus nový GET /api/v1/usage:
POST /api/v1/keys,GET /api/v1/keys— zobraziť svoje vlastné metadáta kľúča (samotný kľúč v otvorenom texte sa zobrazuje len raz pri registrácii / regenerácii).POST /api/v1/domains— podlieha limitumax_domainsna zákazníka.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— Len pre podnikanie (pozri nižšie).
GET /api/v1/usage
Agregácia použitia na jednotlivé domény pre zákazníka Enterprise v danom mesačnom fakturačnom období. Použite to na zosúladenie svojej mesačnej faktúry alebo na fakturáciu vašich vlastných nájomcov na jednotlivé domény.
Parametre dotazu
| Názov | Typ | Predvolené | Popis |
|---|---|---|---|
| period | string | aktuálny mesiac | Formát YYYY-MM. Prekladá sa na [YYYY-MM-01, next-month-01) UTC. Nesprávne formátované hodnoty vrátia 400 invalid_period. |
Príklad
curl https://api.swarmhawk.com/api/v1/usage?period=2026-05 \
-H "X-API-Key: swh_…"Odpoveď
{
"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
}
}Poznámky
- Pole
domainsobsahuje len domény s aspoň jednou udalosťou v danom období. Domény, ktoré vlastníte, ale nepoužívali ste ich v tomto mesiaci, sú vynechané — na úplný inventár sa opýtajte cezGET /api/v1/domains. - Ak sa doména odstráni medzi udalosťou a dopytom, jej riadok sa stále zobrazí s
domain_id: nulladomain: "<deleted>"— audit trail je zachovaný. - Cena odráža efektívnu cenu za volanie v čase udalosti: ak je nastavená zmluva na úrovni zákazníka, má prednosť pred globálnym tabuľkou cien služieb.
- 403
enterprise_onlysa vracia všetkým používateľom iných ako Enterprise tier, ktorí pristupujú k tomuto koncovému bodu.
Správanie pri deaktivácii
Ak je váš podnikový účet pozastavený správcom (neplatenie, koniec zmluvy atď.), každé volanie /api/v1/* — čítanie aj zápis — vráti:
HTTP 403 { "detail": { "error": "enterprise_inactive" } }
Kľúč API nie je odvolaný (takže reaktivácia obnoví prístup bez opätovného vydania kľúčov) a historické usage_events + domains sú zachované. Kontaktujte oddel predaja na reaktiváciu.
Python SDK
Súprava SwarmHawk Python SDK poskytuje bezpečnostným platformám čisté programové rozhranie na sťahovanie zistení, konfiguráciu push integrácií a konzumáciu STIX 2.1 balíkov — bez potreby surových HTTP požiadaviek.
Metódy SDK
| Metóda | Popis | Vracia |
|---|---|---|
domains(min_risk, country, limit, offset) | Výsledky skenu s podporou paginovania | list[dict] |
domain(name) | Úplný detail jednej domény | dict |
alerts(min_risk, since, limit) | Vysokorizikové nálezy, voliteľné od datetime | list[dict] |
iter_alerts(min_risk, page_size) | Generátor — automaticky prechádza všetky výsledky | Iterator[dict] |
stix_bundle(min_risk, limit) | STIX 2.1 balík z /taxii koncového bodu | dict |
integrations() | Zoznam nakonfigurovaných push integrácií | list[dict] |
configure_integration(service, config) | Uložiť poverenia integrácie | dict |
test_integration(service, config) | Testovať konektivitu bez uloženia | {ok, message} |
API integrácie
INTEGRATIONS_ENABLED=false (predvolená konfigurácia platformy) každý /integrations* endpoint vracia HTTP 410 { "error": "feature_disabled" }. Kontaktujte [email protected], ak potrebujete túto funkciu opäť aktivovať pre váš účet.Po aktivácii nakonfigurujte push integrácie tak, aby SwarmHawk automaticky odosielal kritické zistenia do vašich bezpečnostných platforiem v momente ich detekcie (riziko ≥ 70).
GET /integrácie
Zoznam všetkých nakonfigurovaných integácií pre autentifikovaného používateľa. Tajomstvá sú maskované.
POST /integrácie/{service}
Uložiť alebo aktualizovať konfiguráciu integrácie. service je jeden z: splunk · sentinel · crowdstrike · gravityzone · cortex · jira · servicenow · webhook · stix
POST /integrations/{service}/test
Testujte konektivitu bez uloženia. Vracia {"ok": true, "message": "..."}
DEL /integracie/{service}
Odstráňte konfiguráciu integrácie.
Podporované služby
| Služba | Metóda autentifikácie | Spúšť | Typ užitočného zaťaženia |
|---|---|---|---|
| splunk | HEC token | riziko ≥ 70 | CIM-aligned JSON event |
| sentinel | Workspace SharedKey HMAC | riziko ≥ 70 | Ploché polia pripravené na KQL (_s/_d/_b) |
| crowdstrike | Poverenia klienta OAuth2 | riziko ≥ 70 | IOC (type=doména, action=detect/prevent) |
| gravityzone | Bearer prístupový kľúč | riziko ≥ 70 | JSON-RPC createCustomRule |
| cortex | SHA-256 HMAC (api_key_id/nonce/ts) | riziko ≥ 70 | Externé upozornenie s značkami MITRE |
| jira | Základné (email:api_token) | riziko ≥ 70 AND cvss ≥ 7 | ADF-formatovaný problém s tabuľkami CVE/softvéru |
| servicenow | Základné (používateľ:heslo) | riziko ≥ 70 | Incident s mapovaním urgentnosti/vplyvu/SLA |
| webhook | Voliteľný podpis HMAC-SHA256 | riziko ≥ 70 | Obohatený JSON payload |
| stix | Bearer (čítanie cez /taxii) | Pull-based | STIX 2.1 DomainName + objekty zraniteľnosti |
STIX / TAXII 2.1
SwarmHawk poskytuje kompatibilný endpoint TAXII 2.1. Pripojte akúkoľvek platformu hromadenia dômyselnosti o hrozbách (OpenCTI, MISP, ThreatConnect, Anomali) na načítavanie zistení SwarmHawk ako objekty STIX 2.1.
GET /taxii/collections/
TAXII discovery endpoint — vracia metadáta kolekcie.
GET /taxii/collections/swarmhawk/objects/
Vracia STIX 2.1 balík vašich domén s vysokým rizikom ako objekty domain-name, vulnerability a relationship.
| Parameter | Predvolené | Popis |
|---|---|---|
| min_risk | 70 | Minimálne skóre rizika (0–100) |
| limit | 100 | Max objektov (1–500) |
Vrátené typy objektov STIX
| Typ | Obsah |
|---|---|
| domain-name | Hodnota domény, skóre rizika, priorita, krajina |
| vulnerability | ID CVE, skóre CVSS, popis |
| relationship | doména → súvisí s → zraniteľnosť |
Všetky ID objektov sú deterministické (UUID5) — rovnaná doména vždy generuje rovnaké STIX ID v rámci generácií balíkov, čo umožňuje správnu deduplicitu v nadväzujúcich TIP systémoch.
Skripty adaptérov
Samostatné Python skripty pre platformy, kde uprednostňujete naplánovaný pull (cron / Lambda / Azure Function) namiesto vždy aktívneho push konektora. Každý skript načíta výstrahy SwarmHawk a v jednom behu ich pošle do cieľovej platformy.
pip install httpx a akceptujú CLI príznaky aj premenné prostredia.| Platforma | Skript | Predvolená minimálna riziková | Stiahnuť |
|---|---|---|---|
| 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/.Adapter Splunk TA
| Príznak | Premenná prostredia | Popis |
|---|---|---|
| --api-key | SWARMHAWK_API_KEY | Kľúč API SwarmHawk |
| --min-risk | SWARMHAWK_MIN_RISK | Minimálne skóre rizika (predvolené: 70) |
| --base-url | SWARMHAWK_BASE_URL | Základná URL API |
| --index | SWARMHAWK_SPLUNK_INDEX | Názov Splunk indexu (predvolené: main) |
Emituje sourcetype=swarmhawk:scan udalosti s poľami zladenými s CIM: dest, vendor_product, category, severity.
Adaptér Microsoft Sentinel
| Príznak | Premenná prostredia | Popis |
|---|---|---|
| --workspace-id | AZURE_WORKSPACE_ID | ID pracovného priestoru Log Analytics |
| --shared-key | AZURE_SHARED_KEY | Primárny alebo sekundárny zdieľaný kľúč |
| --log-type | AZURE_LOG_TYPE | Vlastný názov tabuľky (predvolené: SwarmHawk) |
| --min-risk | SWARMHAWK_MIN_RISK | Minimálne skóre rizika (predvolené: 70) |
Údaje sú uložené v vlastnej tabuľke SwarmHawk_CL. Príklad KQL: SwarmHawk_CL | where RiskScore_d >= 80 | sort by TimeGenerated desc
Adaptér CrowdStrike Falcon
| Označiť | Premenná prostredia | Popis |
|---|---|---|
| --cs-client-id | CS_CLIENT_ID | ID klienta rozhrania Falcon API |
| --cs-client-secret | CS_CLIENT_SECRET | Falcon API client secret |
| --cs-base-url | CS_BASE_URL | Falcon základná URL (predvolená: api.crowdstrike.com) |
| --min-risk | SWARMHAWK_MIN_RISK | Minimálne skóre rizika (predvolená hodnota: 80) |
Posúva domény ako IOCs (type=domain) v dávkach po 200. Akcia je prevent pre potvrdenú malvér/phishing, detect pre CVE expozíciu.
Adaptér Bitdefender GravityZone
| Značka | Premenná prostredia | Popis |
|---|---|---|
| --gz-api-url | GZ_API_URL | GravityZone JSON-RPC endpoint |
| --gz-access-key | GZ_ACCESS_KEY | Prístupový kľúč API GravityZone |
| --gz-company-id | GZ_COMPANY_ID | ID spoločnosti/nájomcu |
| --min-risk | SWARMHAWK_MIN_RISK | Minimálne skóre rizika (predvolená hodnota: 80) |
Vytvára vlastné pravidlá siete prostredníctvom createCustomRule. Akcia je block pre malware/phishing, report pre CVE expozíciu.
Adaptér Palo Alto Cortex XDR
| Označiť | Premenná prostredia | Popis |
|---|---|---|
| --xdr-api-key | XDR_API_KEY | Cortex XDR API kľúč |
| --xdr-api-key-id | XDR_API_KEY_ID | Číselný ID API kľúča |
| --xdr-fqdn | XDR_FQDN | Vaša doména FQDN (bez https://api-) |
| --min-risk | SWARMHAWK_MIN_RISK | Minimálne skóre rizika (predvolená hodnota: 75) |
Posiela externými upozorneniami s značkami techník MITRE ATT&CK (T1566, T1190, T1046, T1557…). Dávky po 100 na jedno volanie API.
Jira adaptér
| Označiť | Env var | Popis |
|---|---|---|
| --jira-base-url | JIRA_BASE_URL | Atlassian Cloud URL |
| --jira-email | JIRA_EMAIL | Email účtu Atlassian |
| --jira-token | JIRA_TOKEN | Atlassian API token (id.atlassian.com → Bezpečnosť) |
| --jira-project | JIRA_PROJECT | Kľúč projektu (predvolené: SEC) |
| --jira-issue-type | JIRA_ISSUE_TYPE | Typ problému (predvolené: Bug) |
| --min-cvss | SWARMHAWK_MIN_CVSS | Minimálny CVSS na vytvorenieTicketU (predvolené: 7.0) |
Vytvárajú štruktúrované ADF issues so súhrnnou tabuľkou rizík, zisteniami CVE, softvérovým stackom, neúspešnými kontrolami, bodmi na nápraву a nálepkou NIS2. Spúšťajú sa len keď riziko ≥ 70 A cvss ≥ min_cvss, aby sa predišlo spam ticketom.
Adaptér ServiceNow
| Príznak | Premenná prostredia | Popis |
|---|---|---|
| --snow-instance | SNOW_INSTANCE | Subdoména inštancie ServiceNow (bez .service-now.com) |
| --snow-user | SNOW_USER | Meno používateľa ServiceNow |
| --snow-password | SNOW_PASSWORD | Heslo ServiceNow |
| --snow-table | SNOW_TABLE | Cieľová tabuľka (predvolené: incident) |
| --min-risk | SWARMHAWK_MIN_RISK | Minimálne skóre rizika (predvolená hodnota: 70) |
| Priorita | Urgencia | Vplyv | Cieľ SLA |
|---|---|---|---|
| CRITICAL | 1 | 1 | 4 hodiny |
| HIGH | 1 | 2 | 24 hodín |
| MEDIUM | 2 | 2 | 7 dní |
| LOW / INFO | 3 | 3 | 30 dní |
Objekty odozvy
Kontrola objektu
| Pole | Typ | Popis |
|---|---|---|
| check | string | Identifikátor kontroly (pozri Názvy kontrol nižšie) |
| status | string | ok · warning · critical · locked |
| title | string | Jednoradková prehľadná identifikácia zistenia |
| detail | string | Úplné vysvetlenie s dôkazmi |
| score_impact | number | Body pridané k skóre rizika (0–40) |
Interpretácia skóre rizika
| Skóre | Úroveň | Význam |
|---|---|---|
| 0 – 29 | NÍZKE RIZIKO | Dobrá bezpečnostná pozícia, menšie problémy |
| 30 – 59 | STREDNÉ RIZIKO | Výrazné problémy vyžadujúce pozornosť |
| 60 – 100 | VYSOKÉ RIZIKO | Kritické zistenia, potrebná okamžitá akcia |
Kontrola mien
Každá položka v poli checks[] správy o skenovaní má identifikátor check. Úplný zoznam identifikátorov vydávaných skenerom v súčasnosti (zdroj: backend/scanhawk_translator.py + backend/post_scan_processor.py):
| kontrola | Skupina | Popis |
|---|---|---|
tls_protocol | TLS | Vyjednaná verzia TLS (príznaky TLS < 1.2) |
tls_cipher | TLS | Slabé šifrovacie sady |
tls_cert_expiry | TLS | Vypršanie platnosti certifikátu / už vypršaný certifikát |
tls_self_signed | TLS | Certifikát podpísaný vlastníkom |
tls_handshake | TLS | Chyby TLS handshake |
email_dmarc | DMARC chýba alebo je slabý (p=none) | |
mx_blacklist | MX hostiteľ na verejnom zozname blokovaných | |
blacklist | Reputation | Doména alebo A-záznam na verejnom čiernom zozname (Spamhaus / URLhaus / Safe Browsing) |
ip_reputation | Reputation | Signály reputácie hostingového IP / geolokácie / ASN |
cve_match | Vulns | Softvérový fingerprint zhodnutý so známymi CVE (CVSS + KEV + EPSS) |
exposed_git | Exposure | Verejný adresár /.git/ |
exposed_env | Exposure | Verejný súbor .env |
mixed_content | Web | Stránka HTTPS načítava HTTP podresursy |
sri_missing | Web | Chýba integritu subresource na skriptoch tretích strán |
cookies_secure | Web | Cookies chýbajú atribúty Secure / HttpOnly / SameSite |
takeover_risk | DNS | Visiací subdoména / kandidát na prevzatie |
security_txt | Hygiene | Chýbajúci /.well-known/security.txt (RFC 9116) |
whois_privacy | Hygiene | Ochrana WHOIS privacy zapnutá / vypnutá |
ai_summary | Reporting | Analýza hrozieb generovaná AI (iba pre platiacich používateľov) |
Granulárne kontroly (napr. tls_protocol, tls_cipher) sú zoskupené pod širšie kategórie (TLS, DNS, Headers, atď.) na zobrazenie v dashboarde. Správa PDF používa dodatočné používateľsky prívlasť označenia (pozri backend/main.py:CHECK_LABELS, ale identifikátory JSON vyššie sú kľúčovým povrchom útoku.
Získajte svoj bezplatný API kľúč na www.swarmhawk.com → Prihlásenie → Účet → API kľúče
Získajte bezplatný kľúč API →Vyskúšajte Live
Úplný interaktívny API prehliadač — vykonávajte reálne požiadavky proti SwarmHawk API priamo z vášho prehliadača. Vložte svoj API kľúč do tlačidla Authorize na odomknutie autentifikovaných koncových bodov.