Webhook Integration Guide
Connect CallSync to your CRM, ERP, or custom apps. Receive real-time data for every call, recording, and AI analysis automatically.
Live Payload Playground
Explore real-time event data and simulate webhook delivery to your own server instantly.
1. Global Call Type
2. Live Simulator
3. Select Event
New Call Log
call_logged
Recording Sync
recording_updated
AI Analysis Result
ai_analysis
Caller Info Updated
caller_updated
Implementation Workflow
Setup your real-time integration in less than 2 minutes.
Add Endpoint
Go to Settings > Webhooks and click "New Endpoint". Provide your server URL.
Select Events
Choose which events you want to listen for (e.g., New Call Log, AI Analysis).
Secure & Test
Set a secret key for signature verification and send a test payload.
Secure Your Endpoint
We include a signature in every request header to ensure that requests are coming from CallSync and haven't been tampered with.
X-CallSync-Signature
We hash the entire JSON body with your Webhook Secret using HMAC-SHA256 and send it in this header.
Implementation
Compute the HMAC-SHA256 of the raw request body using your secret and compare it with the signature header.
Node.js Verification Example
const crypto = require('crypto');
/**
* Verifies the CallSync webhook signature
* @param {string} rawBody - The raw request body (string)
* @param {string} secret - Your Webhook Secret
* @param {string} signature - The X-CallSync-Signature header
*/
function verifySignature(rawBody, secret, signature) {
const hmac = crypto.createHmac('sha256', secret);
const digest = hmac.update(rawBody).digest('hex');
try {
return crypto.timingSafeEqual(
Buffer.from(digest, 'utf8'),
Buffer.from(signature, 'utf8')
);
} catch (err) {
return false;
}
}
// Example: Express.js (Ensure you use raw body parsing)
app.post('/webhooks', (req, res) => {
const signature = req.headers['x-callsync-signature'];
const isValid = verifySignature(req.rawBody, process.env.WH_SECRET, signature);
if (!isValid) return res.status(401).send('Invalid signature');
// ... Handle event
});