// docs / webhooks
Webhook'lar
FixVibe, taramanın tamamlanması, terminal arızaları, yüksek önem derecesine sahip bulgular, canlı izleme uyarıları ve planlanmış çalıştırmalar için imzalanmış giden web kancaları gönderir. Teslimatlar en az bir kez yapılır ve yaklaşık 24 saat boyunca yeniden denenir.
Setup
Account → Webhooks'yi açın, bir HTTPS uç noktası oluşturun ve tek seferlik whsec_ sırrını alıcınızda saklayın. Web kancaları ücretli planlarda mevcuttur.
- Account → Webhooks'dan bir uç nokta oluşturun.
- Bu uç noktaya hangi olayların FixVibe gönderilmesi gerektiğini seçin.
- Sırrı hemen kopyalayın; bir kez gösterilir ve yalnızca daha sonra döndürülebilir.
Events
Lansman etkinliği yüzeyi, ekiplerin genellikle CI ile bağlantı kurduğu, uyarı verdiği veya bilet oluşturduğu anları kapsar:
- scan.completed — bir tarama completed'ye geçiş yaptığında tetiklenir. Yük: tarama kimliği, hedef, mod, önem derecesi-demet sayıları, rapora bağlantı.
- scan.failed — terminal hatası bildirimi. Yük: tarama kimliği, arıza nedeni ve mevcut olduğunda rapor bağlantısı.
- finding.created — kritik veya yüksek bulguya göre yayılır. Olay spam'ını önlemek için daha düşük önem dereceleri varsayılan olarak scan.completed şeklinde daraltılır.
- monitor.alert.fired — sertifika şeffaflığı günlükleri, DNS kayıtları veya tehdit istihbaratı veritabanları değişiklikleri algıladığında Unlimited planını etkinleştirir.
- schedule.run.queued — zamanlayıcı yeniden taramayı kuyruğa aldığında tetiklenir. CI orkestrasyonu için kullanışlıdır.
Yük şekli
Her teslimatta aynı zarf kullanılır: <code>id</code>, <code>type</code>, <code>created_at</code> ve etkinliğe özel <code>data</code>.
{
"id": "8f1c4e2a-8c3a-4b6f-9c0d-9b1e8f3c2a4d",
"type": "scan.completed",
"created_at": "2026-05-15T10:20:30.000Z",
"data": {
"scan": {
"id": "8f1c4e2a-8c3a-4b6f-9c0d-9b1e8f3c2a4d",
"target_hostname": "staging.example.com",
"mode": "passive",
"status": "completed",
"findings_count": { "critical": 0, "high": 1, "medium": 2, "low": 3, "info": 4 },
"report_url": "https://fixvibe.app/dashboard/scans/8f1c4e2a-..."
}
}
}Signing
FixVibe, tam ham JSON gövdesini HMAC-SHA-256 ile imzalar. Etkinlik verilerini ayrıştırmadan veya güvenmeden önce imzayı doğrulayın. Başlıklar:
fixvibe-signature: t=<timestamp>,v1=<hex hmac>fixvibe-event: scan.completedfixvibe-delivery: <uuid>(idempotency anahtarı)
import { createHmac, timingSafeEqual } from "node:crypto";
function verify(rawBody: string, header: string, secret: string) {
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
const signed = `${parts.t}.${rawBody}`;
const expected = createHmac("sha256", secret).update(signed).digest("hex");
const received = Buffer.from(parts.v1 ?? "", "hex");
const calculated = Buffer.from(expected, "hex");
return received.length === calculated.length && timingSafeEqual(received, calculated);
}Retries
2xx dışı herhangi bir yanıt, zaman aşımı, DNS hatası veya teslimat güvenliği reddi, yaklaşık 24 saat boyunca üstel geri çekilmeyle yeniden denenir. Teslim satırları, Hesap → Web Kancaları'nda yanıt durumunu, kısa bir yanıt alıntısını, deneme sayısını ve geçersiz harf durumunu gösterir.
