POST request in response to certain events occurring in your workspace.
Support events include: call.completed, call.recording.ready
Configuring Webhooks
Webhooks depend on you providing a URL endpoint to a secured HTTPS server that can receive & respond to delivered messages from Quarterzip. Testing can performed with online services such as webhook.site, or against locally running servers using ngrok or Cloudflare tunnels.- In the Quarterzip dashboard, go to Settings → Webhooks.
- Enter the HTTPS URL that should receive events.
- Toggle Enabled on and save.
Secured with Signatures
Quarterzip signs every delivery using the open Standard Webhooks specification. This includes awebhook-signature header value that you can verify against to ensure that the webhook message was delivered by Quarterzip and was not tampered in transit.
Verifying the signature is optional. Webhook message are not encoded.
Verifying the signature
When you save a URL for the first time, Quarterzip generates a signing secret. Each request includes three headers:
The official
standardwebhooks libraries can be used to verify a webhook delivery with only a few lines of code.
Rotating the secret
A new signing secret can be generated from the workspace’s SDK settings page. Rotation takes effect immediately.Delivery, Retries & Timeouts
Return any2xx status code to acknowledge a webhook. Anything else — 4xx, 5xx, a connection error, or a timeout — is treated as a failed delivery and will be retried.
Acknowledge first, process later. Your endpoint should do the minimum needed to persist the event (write it to a queue or a table) and return 2xx immediately. Doing the work inline risks hitting the timeout, and a timeout means redelivering an event you have already processed.
Each delivery attempt is given 30 seconds. An attempt that hasn’t completed in that window is abandoned and retried. A failed delivery is retried up to 3 times with fixed backoff: 1, 5, & 15 minutes. After the final retry the event is dropped and the endpoint is considered unreachable - this will automatically disable the workspace’s webhooks.
Retries reuse the same webhook-id header as the original attempt. You should expect duplicates even when nothing looks wrong. A response we never received — because it arrived after the timeout, or the connection dropped mid-response — is indistinguishable from a failure, so we may retry an event your endpoint already processed successfully.
Best Practices
- While webhooks is in preview, ensure that your server’s endpoint handler responds with a
2xxstatus code. Consider wrapping the handler in atry...except,try...catch, or equivalent. Failing to do so risks the workspace’s registered webhook to be automatically deactivated; see Delivery, Retries & Timeouts. - Evaluate received messages by event
type. The likelihood of new event types encourages the following pattern:
Events
call.completed
Quarterzip sends this event after a call finishes processing. The request is a JSON POST with Content-Type: application/json.

