Webhooks allow you to receive real-time notifications when events occur in the platform. Set up webhooks to integrate with external systems, trigger automations, or keep your systems synchronized.
Create a webhook endpoint:
![]()
Webhook Configuration:
Subscribe to platform events:
Recording Events:
recording.created: New recording uploadedrecording.processing.started: Recording processing beganrecording.processing.completed: Recording processing finishedrecording.processing.failed: Recording processing failedrecording.transcript.ready: Transcript availablerecording.deleted: Recording deletedMeeting Events:
meeting.created: New meeting createdmeeting.updated: Meeting details updatedmeeting.deleted: Meeting deletedmeeting.started: Meeting startedmeeting.ended: Meeting endedTranscript Events:
transcript.generated: Transcript generatedtranscript.updated: Transcript updatedSignal Events:
signal.detected: New signal detectedsignal.confirmed: Signal confirmed by userUser Events:
user.invited: Team member inviteduser.joined: Team member joined organizationSelect only the events you need to reduce webhook traffic.
![]()
Webhook payloads contain event information:
Example Payload:
{
"event": "recording.processing.completed",
"timestamp": "2024-01-15T10:30:00Z",
"data": {
"recording": {
"id": 123,
"title": "Team Meeting",
"status": "completed",
"duration": 3600,
"transcript_ready": true
}
}
}
Recording Created Payload:
{
"event": "recording.created",
"timestamp": "2024-01-15T10:00:00Z",
"data": {
"recording": {
"id": 123,
"title": "New Recording",
"status": "new",
"file_size": 104857600,
"created_at": "2024-01-15T10:00:00Z"
}
}
}
Transcript Ready Payload:
{
"event": "recording.transcript.ready",
"timestamp": "2024-01-15T10:30:00Z",
"data": {
"recording": {
"id": 123,
"title": "Team Meeting",
"transcript": {
"id": 456,
"text": "Full transcript text...",
"speakers": [
{
"id": 1,
"name": "John Doe"
}
]
}
}
}
}
All webhook payloads include:
event: Event type identifiertimestamp: ISO 8601 timestampdata: Event-specific data![]()
Secure your webhooks:
Signature Verification:
Webhooks include a signature header for verification:
X-Webhook-Signature: sha256=abc123def456...
Verification Example (Node.js):
const crypto = require('crypto');
function verifyWebhookSignature(payload, signature, secret) {
const hmac = crypto.createHmac('sha256', secret);
const digest = hmac.update(JSON.stringify(payload)).digest('hex');
const expectedSignature = `sha256=${digest}`;
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expectedSignature)
);
}
// In your webhook handler
const signature = req.headers['x-webhook-signature'];
const isValid = verifyWebhookSignature(req.body, signature, webhookSecret);
if (!isValid) {
return res.status(401).send('Invalid signature');
}
Security Best Practices:
![]()
Test your webhook endpoints:
Test Webhook:
Manual Testing:
Use tools like ngrok to test webhooks locally:
# Start ngrok tunnel
ngrok http 3000
# Use ngrok URL as webhook URL
# https://abc123.ngrok.io/webhooks
Test Payload Example:
{
"event": "recording.created",
"timestamp": "2024-01-15T10:00:00Z",
"data": {
"recording": {
"id": 999,
"title": "Test Recording",
"status": "new"
}
}
}
Webhook Delivery Status:
![]()
Follow these best practices to get the most out of the API:
Now that you understand the API:
Happy coding! 🚀