// docs / webhooks
Webhook
FixVibe mengirimkan webhook keluar yang ditandatangani untuk penyelesaian pemindaian, kegagalan terminal, temuan dengan tingkat keparahan tinggi, peringatan monitor langsung, dan proses terjadwal. Pengiriman dilakukan setidaknya sekali dan coba lagi selama sekitar 24 jam.
Setup
Buka Account → Webhooks, buat titik akhir HTTPS, dan simpan rahasia whsec_ satu kali di penerima Anda. Webhook tersedia pada paket berbayar.
- Buat titik akhir dari Account → Webhooks.
- Pilih peristiwa mana FixVibe yang harus dikirim ke titik akhir tersebut.
- Salin rahasianya segera; itu ditampilkan sekali dan hanya dapat diputar nanti.
Events
Permukaan acara peluncuran mencakup momen-momen yang biasanya dilakukan tim untuk terhubung ke CI, memberi peringatan, atau menjual tiket:
- scan.completed — menyala ketika pemindaian beralih ke completed. Payload: id pemindaian, target, mode, jumlah keranjang tingkat keparahan, tautan ke laporan.
- scan.failed — pemberitahuan kegagalan terminal. Payload: id pemindaian, alasan kegagalan, dan tautan laporan bila tersedia.
- finding.created — dipancarkan per temuan kritis atau tinggi. Tingkat keparahan yang lebih rendah diciutkan ke scan.completed secara default untuk menghindari spam acara.
- monitor.alert.fired — diaktifkan pada paket Unlimited ketika log transparansi sertifikat, catatan DNS, atau database intelijen ancaman mendeteksi perubahan.
- schedule.run.queued — menyala ketika penjadwal melakukan pemindaian ulang. Berguna untuk orkestrasi CI.
Bentuk muatan
Setiap pengiriman menggunakan amplop yang sama: <code>id</code>, <code>type</code>, <code>created_at</code>, dan <code>data</code> khusus acara.
{
"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 menandatangani tubuh mentah JSON dengan HMAC-SHA-256. Verifikasi tanda tangan sebelum menguraikan atau memercayai data peristiwa. Tajuk:
fixvibe-signature: t=<timestamp>,v1=<hex hmac>fixvibe-event: scan.completedfixvibe-delivery: <uuid>(kunci idempotensi)
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
Setiap respons non-2xx, batas waktu, kegagalan DNS, atau penolakan keamanan pengiriman dicoba ulang dengan backoff eksponensial selama sekitar 24 jam. Baris pengiriman menunjukkan status respons, kutipan respons singkat, jumlah upaya, dan status surat mati di Akun → Webhook.
