// docs / webhooks
웹훅
FixVibe은 검사 완료, 터미널 오류, 심각도가 높은 결과, 실시간 모니터 경고 및 예약된 실행을 위해 서명된 아웃바운드 웹후크를 보냅니다. 전송은 한 번 이상 이루어지며 약 24시간 동안 재시도됩니다.
Setup
Account → Webhooks을 열고 HTTPS 엔드포인트를 생성한 다음 일회성 whsec_ 암호를 수신기에 저장합니다. 웹훅은 유료 플랜에서 사용할 수 있습니다.
- Account → Webhooks에서 엔드포인트를 만듭니다.
- FixVibe이 해당 엔드포인트로 보내야 하는 이벤트를 선택하세요.
- 즉시 비밀을 복사하세요. 한 번 표시되며 나중에만 회전할 수 있습니다.
Events
출시 이벤트 화면에서는 팀이 일반적으로 CI에 연결하는 순간, 알림 또는 티켓팅을 다룹니다.
- scan.completed — 스캔이 completed으로 전환되면 실행됩니다. 페이로드: 스캔 ID, 대상, 모드, 심각도 버킷 수, 보고서 링크.
- scan.failed — 터미널 오류 알림. 페이로드: 스캔 ID, 실패 이유 및 가능한 경우 보고서 링크.
- finding.created — 중요 또는 높은 결과에 따라 방출됩니다. 이벤트 스팸을 방지하기 위해 심각도가 낮을수록 기본적으로 scan.completed으로 축소됩니다.
- monitor.alert.fired — 인증서 투명성 로그, DNS 기록 또는 위협 인텔리전스 데이터베이스가 변경 사항을 감지하면 Unlimited 계획에서 실행됩니다.
- schedule.run.queued — 스케줄러가 다시 스캔을 대기열에 추가하면 실행됩니다. CI 오케스트레이션에 유용합니다.
페이로드 형태
모든 배송에는 <code>id</code>, <code>type</code>, <code>created_at</code> 및 이벤트별 <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은 HMAC-SHA-256으로 정확한 원시 JSON 본문에 서명합니다. 이벤트 데이터를 구문 분석하거나 신뢰하기 전에 서명을 확인하세요. 헤더:
fixvibe-signature: t=<timestamp>,v1=<hex hmac>fixvibe-event: scan.completedfixvibe-delivery: <uuid>(멱등성 키)
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가 아닌 응답, 시간 초과, DNS 실패 또는 전송 안전 거부는 약 24시간 동안 지수 백오프를 통해 재시도됩니다. 전송 행에는 계정 → Webhooks의 응답 상태, 짧은 응답 발췌, 시도 횟수 및 배달 못한 편지 상태가 표시됩니다.
