Outbound Webhooks Pro
Outbound Webhooks let you push real-time event data from Sydx AI to any external URL. Whenever something happens in your CRM — a new message arrives, a contact is created, a lead is captured — Sydx AI instantly sends a POST request to your configured webhook URL.
How It Works Real-time
1. Event occurs in Sydx AI (e.g., customer sends a WhatsApp message)
2. Sydx AI builds event payload (contact name, phone, message text, etc.)
3. Payload is signed with HMAC-SHA256 (using your webhook's secret key)
4. POST request sent to your URL (with security headers)
5. Your server/tool processes the data (n8n, Zapier, Make.com, custom server)
This is a PUSH model — Sydx AI proactively sends data to you in real-time. No polling required.
Supported Events
| Event | Triggered When | Payload Data |
|---|---|---|
message.received | A customer sends a WhatsApp message | Contact phone, name, message body, message type |
message.sent | An outbound message is sent to a customer | Contact phone, message body, status |
contact.created | A new contact messages for the first time | Contact name, WhatsApp ID, source |
contact.updated | A contact's profile or tags are updated | Contact details, changed fields |
lead.captured | A lead is captured via Facebook Ad, web form, or chatbot flow | Lead name, phone, email, source, campaign |
lead.assigned | A lead is assigned to a team member | Lead details, assigned agent |
campaign.sent | A broadcast campaign is sent | Campaign name, recipient count |
campaign.completed | A broadcast campaign finishes delivery | Campaign name, success/failure stats |
flow.completed | A chatbot flow completes execution | Flow name, contact, session data |
Setting Up an Outbound Webhook Admin Only
Step 1: Navigate to Settings
- Open the Sydx AI dashboard
- Click Settings in the sidebar
- Go to the Outbound Webhooks section
Step 2: Create a Webhook
- Click "Create Webhook"
- Fill in the details:
- Name — A descriptive name (e.g., "n8n Lead Alert", "Zapier New Message")
- URL — The endpoint URL where events will be sent (must be HTTPS)
- Events — Select one or more events to subscribe to
- Click Create
Step 3: Copy Your Secret
After creation, you'll receive a webhook secret (starts with whsec_).
The full secret is only shown once during creation. Copy and store it securely. You'll need it to verify webhook signatures on your receiving server.
Step 4: Test the Connection
- Click the "Test" button next to your webhook
- Sydx AI will send a
test.pingevent to your URL - Verify you receive the test payload in your external tool
Webhook Payload Format
Every webhook delivery sends a JSON body with this structure:
{
"event": "message.received",
"timestamp": "2026-03-25T08:22:50.254Z",
"tenantId": "your-tenant-id",
"data": {
"contact": "919876543210",
"name": "John Doe",
"body": "Hello, I'm interested in your product",
"type": "text"
}
}
HTTP Headers
Every delivery includes these headers for security and debugging:
| Header | Description | Example |
|---|---|---|
Content-Type | Always application/json | application/json |
X-Sydx-Event | The event type | message.received |
X-Sydx-Timestamp | ISO 8601 timestamp of the event | 2026-03-25T08:22:50.254Z |
X-Sydx-Signature | HMAC-SHA256 signature of the payload | 362bb526c7ab9... |
User-Agent | Identifies the sender | SydxAI-Webhook/1.0 |
Security: Verifying Signatures
Every webhook delivery is signed using HMAC-SHA256 with your webhook's secret key. Always verify the signature on your receiving server to ensure the request genuinely came from Sydx AI.
How to Verify (Node.js Example)
const crypto = require('crypto');
function verifyWebhookSignature(payload, signature, secret) {
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(JSON.stringify(payload))
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expectedSignature)
);
}
// In your webhook handler:
app.post('/webhook', (req, res) => {
const signature = req.headers['x-sydx-signature'];
const isValid = verifyWebhookSignature(req.body, signature, 'whsec_your_secret_here');
if (!isValid) {
return res.status(401).json({ error: 'Invalid signature' });
}
// Process the event
console.log('Event:', req.body.event);
console.log('Data:', req.body.data);
res.status(200).json({ received: true });
});
Retry Logic
If your endpoint fails to respond with a 2xx status code, Sydx AI will automatically retry delivery:
| Attempt | Delay | Total Wait |
|---|---|---|
| 1st retry | 5 seconds | 5s |
| 2nd retry | 30 seconds | 35s |
| 3rd retry | 2 minutes | ~2.5 min |
After 3 failed attempts, the delivery is marked as failed and logged in the Delivery Logs.
Connecting with Popular Tools
n8n (Self-Hosted or Cloud)
- In n8n, create a new workflow
- Add a Webhook trigger node
- Set HTTP Method to POST
- Copy the Production URL from n8n
- Paste it as the webhook URL in Sydx AI Settings
- Select your events and save
- Click Test to verify the connection
- In n8n, switch your webhook node to Production URL mode
- Add downstream nodes (Google Sheets, Email, Slack, etc.)
Zapier
- Create a new Zap in Zapier
- Set the trigger to "Webhooks by Zapier" → "Catch Hook"
- Copy the webhook URL provided by Zapier
- Paste it as the webhook URL in Sydx AI Settings
- Select your events and save
- Click Test to send a sample event
- In Zapier, map the received fields to your action (Google Sheets, Email, etc.)
Make.com (formerly Integromat)
- Create a new scenario in Make.com
- Add a Webhooks → "Custom webhook" module
- Copy the webhook URL
- Paste it in Sydx AI Settings as the webhook URL
- Select events and save
- Click Test to verify
- Add downstream modules for processing
Custom Server
Point any server endpoint that accepts POST requests:
# Example: Your server at https://api.yourcompany.com/sydx-webhook
# Sydx AI will POST event data to this URL
Managing Webhooks
Rotating Secrets
If you suspect your webhook secret has been compromised:
- Go to Settings → Outbound Webhooks
- Click the "Rotate Secret" button on the webhook
- A new secret will be generated
- Update the secret in your receiving application
- The old secret is immediately invalidated
Viewing Delivery Logs
Monitor all webhook deliveries from the Delivery Logs tab:
- See delivery status (success/failed)
- View response codes and timing
- Debug failed deliveries
- Filter by event type or status
Deleting a Webhook
- Go to Settings → Outbound Webhooks
- Click the Delete button on the webhook you want to remove
- Confirm deletion — all future event deliveries to this URL will stop
Troubleshooting
Webhook Not Receiving Events
| Issue | Solution |
|---|---|
| No events received | Verify the webhook URL is correct and accessible |
test.ping works but real events don't | Check that the correct events are selected in the webhook configuration |
| SSL/TLS errors | Ensure your endpoint has a valid HTTPS certificate |
| Timeout errors | Your endpoint must respond within 5 seconds |
Common Response Codes
| Code | Meaning |
|---|---|
200 | ✅ Success — event was received and processed |
401 | ❌ Unauthorized — check your signature verification logic |
404 | ❌ URL not found — verify the webhook URL is correct |
500 | ❌ Server error — check your server logs |
Timeout | ❌ No response within 5 seconds — optimize your handler |
Keep your webhook handler fast and lightweight. Accept the event, respond with 200 OK immediately, and process the data asynchronously. This prevents timeout issues and ensures reliable delivery.