Webhooks
Receive real-time event notifications from GudDesk via webhooks.
Webhooks let you receive HTTP POST notifications when events happen in your GudDesk workspace. Use them to sync data, trigger workflows, or integrate with external tools.
Setting Up Webhooks
- Go to Dashboard > Settings > Webhooks
- Click Add Endpoint
- Enter your webhook URL (must be HTTPS)
- Select the events you want to receive
- Click Save
GudDesk will send a test event to verify your endpoint is reachable.
Event Types
| Event | Description |
|---|---|
conversation.created | A new conversation was started |
conversation.updated | Conversation status, assignee, or tags changed |
conversation.resolved | A conversation was resolved |
message.created | A new message was sent (customer or agent) |
customer.created | A new customer was identified |
customer.updated | Customer profile was updated |
agent.resolved | An AI agent resolved a conversation |
agent.escalated | An AI agent escalated to a human |
article.created | A knowledge base article was published |
article.updated | An article was modified |
Payload Format
All webhook payloads follow this structure:
{
"id": "evt_abc123",
"type": "conversation.created",
"createdAt": "2025-06-15T10:30:00Z",
"data": {
"id": "conv_xyz789",
"status": "open",
"customer": {
"id": "cus_123",
"email": "jane@example.com",
"name": "Jane Doe"
},
"messages": [
{
"id": "msg_001",
"role": "customer",
"text": "Hi, I need help with my account",
"createdAt": "2025-06-15T10:30:00Z"
}
]
}
}Verifying Signatures
Every webhook request includes a signature header for verification:
X-GudDesk-Signature: sha256=abc123...
Verify the signature using your webhook secret (found in Settings):
import crypto from "crypto";
function verifyWebhook(payload: string, signature: string, secret: string) {
const expected = crypto
.createHmac("sha256", secret)
.update(payload)
.digest("hex");
return `sha256=${expected}` === signature;
}Always verify signatures in production to ensure requests are genuinely from GudDesk.
Retry Policy
If your endpoint returns a non-2xx status code, GudDesk retries with exponential backoff:
| Attempt | Delay |
|---|---|
| 1st retry | 1 minute |
| 2nd retry | 5 minutes |
| 3rd retry | 30 minutes |
| 4th retry | 2 hours |
| 5th retry | 12 hours |
After 5 failed attempts, the event is marked as failed and can be manually retried from the dashboard.
Testing Webhooks
Use the Test button in Settings to send a sample event to your endpoint. For local development, use a tunneling service like ngrok:
ngrok http 3000
# Use the ngrok URL as your webhook endpointBest Practices
- Respond quickly — Return a 200 status within 5 seconds. Do heavy processing asynchronously.
- Handle duplicates — Use the
idfield to deduplicate events. - Verify signatures — Always validate the
X-GudDesk-Signatureheader. - Use HTTPS — Webhook URLs must use HTTPS in production.