POST request to the URL you register, carrying a signed JSON payload with everything you need to update your CRM, trigger a sales alert, or kick off an automation.
Supported Events
Create a Webhook
Register a new webhook endpoint byPOSTing to /v1/webhooks with your destination URL and the list of events you want to subscribe to.
secret_prefix is a preview only — it shows a truncated portion of your signing secret, not the full value. Retrieve the full signing key with the endpoint below.webhooks:write scope; listing them and fetching the signing key requires webhooks:read.
Payload Structure
Every webhook deliveryPOSTs a JSON body to your endpoint. Here is a full example for the account.identified event:
event field tells you which event type fired. The data object contains the full record — its shape varies by event type but always includes an id you can use to fetch the complete resource from the REST API.
Verifying Signatures
Knock2 signs every webhook payload with HMAC-SHA256 and delivers the signature in theX-Knock-Signature request header. Always verify the signature before processing the payload to ensure the request genuinely came from Knock2.
Verification is a standard HMAC-SHA256 check over the raw request body bytes (not a parsed/re-serialized object):
Getting Your Signing Key
Thesecret you pass to the snippets above is retrieved with GET /v1/webhooks/{webhook_id}/secret (requires the webhooks:read scope):
Unlike your API key, the signing key is never stored — it’s re-derived from the subscription ID on every request, so you can fetch it again at any time. There’s no “shown only once” restriction, and nothing is invalidated by requesting it more than once.
List Webhooks
Retrieve all registered webhook subscriptions for your account:This endpoint is not paginated —
GET /v1/webhooks returns all active subscriptions for your tenant in a single response, without has_more/next_cursor.Delete a Webhook
Remove a webhook subscription by sending aDELETE request with the webhook ID:
204 No Content with an empty body. Knock2 stops delivering events to that URL immediately.
Webhook endpoint URLs must use HTTPS. Plain HTTP URLs are rejected at registration time to ensure your payload data is encrypted in transit. If you’re testing locally, use a tunneling tool such as ngrok to simulate deliveries safely.
Parent/Child Fan-in
A subscription you create with your own (parent) API key automatically covers events fired for every one of your child tenants too — you don’t need to register a separate subscription per child, and tenants created after the subscription already exists are covered from the moment they’re created. Every delivery includes aproduct_slug field so you can tell which tenant an event actually came from.
If a child tenant also has its own subscription for the same event type, both fire — duplicate delivery across a parent-level and child-level subscription is the accepted default, since deliveries are already dedupable by X-Knock-Delivery-Id.
Delivery and Retries
Deliveries are at-least-once — design your handler to be idempotent (dedupe on the event payload’sid). If your endpoint doesn’t respond successfully, Knock2 retries with the following backoff schedule: 1 minute, 5 minutes, 30 minutes, then 2 hours after the initial attempt. After the 5th attempt fails, the delivery is marked dead-lettered and no further retries occur.