Skip to main content
Webhooks are currently in preview. Seamless delivery is not guaranteed, and the API, payload shape, and behaviour are likely to change in future releases without notice.
Webhooks allows Quarterzip to provide you with real-time event notifications. By registering a secured URL endpoint, Quarterzip will send a signed 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.
  1. In the Quarterzip dashboard, go to Settings → Webhooks.
  2. Enter the HTTPS URL that should receive events.
  3. Toggle Enabled on and save.
You can configure one endpoint per workspace.

Secured with Signatures

Quarterzip signs every delivery using the open Standard Webhooks specification. This includes a webhook-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 any 2xx 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 2xx status code. Consider wrapping the handler in a try...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.

Example payload

call.recording.ready

Quarterzip sends an event after a call’s recording is ready for download. The delivery of this event is not guaranteed; calls may not have recordings, or workspaces may have recordings disabled.

Example Payload

Troubleshooting