Integrations

Using the Cradle webhook API

Receive real-time call events in your own systems via Cradle webhooks.

Legacy Help Docs
We're in the process of refreshing our help docs. This flag will be removed when this article has been updated.

Cradle posts a JSON payload to your endpoint when a call starts, ends, or is missed. Configure the URL under Settings → API.

Example payload

{
  "event": "call.ended",
  "call_id": "c_01HXYZ",
  "from": "+64211234567",
  "to": "+6494000000",
  "duration_seconds": 142,
  "recording_url": "https://recordings.cradle.io/c_01HXYZ.mp3"
}

Verifying the signature

Each request includes an X-Cradle-Signature header. Verify it with your shared secret:

import crypto from "node:crypto"

function verify(body: string, signature: string, secret: string) {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(body)
    .digest("hex")
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signature),
  )
}