Webhooks
Webhooks notify your external systems in real time when events occur in Skode. Instead of polling the API for changes, register a webhook URL and Skode will send an HTTP POST request with event data whenever a subscribed event fires.
Creating a Webhook
Navigate to Settings > API & Webhooks > Webhooks and click + Add Webhook. Provide a destination URL (HTTPS required), select the events you want to subscribe to, and optionally set a secret key for signature verification.
curl -X POST "https://api.skodeai.com/v1/webhooks" \
-H "Authorization: Bearer sk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-app.com/webhooks/skode",
"events": ["lead.created", "lead.updated", "deal.stage_changed", "deal.closed"],
"secret": "whsec_your_signing_secret"
}'
Available Events
lead.created,lead.updated,lead.deleted,lead.assigneddeal.created,deal.updated,deal.stage_changed,deal.closedcontact.created,contact.updated,contact.deleted,contact.mergedinvoice.created,invoice.sent,invoice.paid,invoice.overduetask.created,task.completed,task.overduemessage.received,message.sent,conversation.assigned
Payload Format
{
"id": "evt_abc123",
"event": "lead.created",
"created_at": "2026-03-15T10:30:00Z",
"data": {
"id": "lead_xyz789",
"name": "John Smith",
"email": "john@example.com",
"company": "Example Corp",
"source": "website",
"created_at": "2026-03-15T10:30:00Z"
}
}
Signature Verification
If you set a secret key, Skode includes an X-Skode-Signature header with each delivery. Verify it using HMAC-SHA256:
const crypto = require('crypto');
function verifyWebhook(payload, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}
Retry Logic
If your endpoint returns a non-2xx status code or times out (30 seconds), Skode retries the delivery using exponential backoff: 1 minute, 5 minutes, 30 minutes, 2 hours, and 24 hours. After 5 failed attempts, the webhook is marked as failing and you receive an email notification. Fix the issue and re-enable the webhook from the settings page.
Webhook Logs
View delivery history for each webhook under Settings > Webhooks > Logs. Each log entry shows the event type, payload, response status code, response body, and delivery duration. Use logs to debug integration issues and verify payloads.