Available Events
| Event | Description |
|---|
note.created | A new note has been created (recording synced) |
note.processed | Processing complete — transcript, summary, and action items are ready |
recording.ready | A raw recording has been uploaded and is available |
action_item.created | A new action item was extracted from a recording |
Create Webhook
Register a new webhook endpoint.
HTTPS endpoint to receive events
Event types to subscribe to
Signing secret for payload verification
curl -X POST https://api.ruune.ai/v1/webhooks \
-H "Authorization: Bearer ruune_sk_live_xxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/hooks/ruune",
"events": ["note.processed", "action_item.created"],
"secret": "whsec_my_signing_secret"
}'
{
"id": "wh_abc",
"url": "https://example.com/hooks/ruune",
"events": ["note.processed", "action_item.created"],
"active": true,
"created_at": "2026-06-01T00:00:00Z"
}
List Webhooks
List all registered webhooks.
{
"data": [
{
"id": "wh_abc",
"url": "https://example.com/hooks/ruune",
"events": ["note.processed", "action_item.created"],
"active": true
}
]
}
Delete Webhook
Delete a webhook subscription.
Payload Verification
If you provide a secret when creating a webhook, every delivery includes a X-Ruune-Signature header containing an HMAC-SHA256 signature of the raw request body.
Verify Signature (Node.js)
import crypto from "crypto";
function verifyWebhook(body, signature, secret) {
const expected = crypto
.createHmac("sha256", secret)
.update(body)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}
Webhook deliveries timeout after 10 seconds. If your endpoint returns a non-2xx status, we retry up to 3 times with exponential backoff.