Skip to main content

Overview

Webhooks deliver events to your endpoint as they happen. Use them to trigger remediation workflows, update dashboards, or notify your team.

Events

Payload format

Every delivery is a POST with a stable JSON envelope. The data object is event-specific and documented per event below.

scan.created

A pentest was created and queued.

scan.completed, scan.failed, scan.cancelled

A pentest status changed. The three events share the same payload shape; status is completed, failed, or cancelled respectively.

vulnerability.created

A vulnerability was created for a pentest.

vulnerability.status_changed

A vulnerability status was changed.

vulnerability.severity_changed

A vulnerability severity was changed with an override reason.

Create a webhook

Required scope: webhooks:write The response includes a secret field — store it securely. It will not be shown again.

Per-business_unit routing

By default a subscription is org-wide: it fires for every matching event in your organization. On Enterprise plans you can scope a subscription to a single business_unit so it only receives events whose assets belong to that business unit — useful when you run multiple end-customers in one organization and want each to receive only their own events.
  • Omit business_unit (or set it to null) for an org-wide subscription — this is the default and matches existing behavior.
  • Set business_unit to a string to receive only events whose resolved business units include that value. An event’s business units are derived from the assets (domains/repositories) involved.
  • Setting business_unit requires the Enterprise plan (the rbac feature). Requests on other plans return 403.
  • To convert a scoped subscription back to org-wide, PATCH it with "business_unit": null.
Set an asset’s business_unit via POST/PATCH on /v1/domains and /v1/repositories. Tokens scoped to a business_unit only see and manage that unit’s assets, scans, and vulnerabilities.

Verify webhook signatures

Every webhook delivery includes signature headers for verification:

Signature verification (Node.js)

Always verify the signature before processing webhook payloads. Reject requests with expired timestamps (older than 5 minutes) to prevent replay attacks.

Delivery and retries

Events are delivered asynchronously with retries and exponential backoff. Use the X-Strix-Delivery header as an idempotency key when processing events to handle potential duplicate deliveries.

Manage webhooks

List webhooks

Required scope: webhooks:read

Update a webhook

Required scope: webhooks:write

Rotate webhook secret

The response includes the new secret. The old secret is invalidated immediately. Required scope: webhooks:write

Delete a webhook

Required scope: webhooks:write

Inspect deliveries

Required scope: webhooks:read