FixVibe

// docs / webhooks

웹훅

FixVibe은 검사 완료, 터미널 오류, 심각도가 높은 결과, 실시간 모니터 경고 및 예약된 실행을 위해 서명된 아웃바운드 웹후크를 보냅니다. 전송은 한 번 이상 이루어지며 약 24시간 동안 재시도됩니다.

Setup

Account → Webhooks을 열고 HTTPS 엔드포인트를 생성한 다음 일회성 whsec_ 암호를 수신기에 저장합니다. 웹훅은 유료 플랜에서 사용할 수 있습니다.

  1. Account → Webhooks에서 엔드포인트를 만듭니다.
  2. FixVibe이 해당 엔드포인트로 보내야 하는 이벤트를 선택하세요.
  3. 즉시 비밀을 복사하세요. 한 번 표시되며 나중에만 회전할 수 있습니다.

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>과 같은 동일한 봉투가 사용됩니다.

json
{
  "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.completed
  • fixvibe-delivery: <uuid> (멱등성 키)
ts
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의 응답 상태, 짧은 응답 발췌, 시도 횟수 및 배달 못한 편지 상태가 표시됩니다.

웹훅 — Docs · FixVibe