Skip to content

Webhooks

Webhooks let you receive signals programmatically, enabling custom integrations with your CRM, notification systems, or internal tools.

  1. Navigate to Notifications

    Go to Alerts → Notifications in your dashboard.

  2. Add Webhook Notification

    Click Add Notification and select Webhook as the type.

  3. Configure Endpoint

    Enter your webhook URL. This is the endpoint that will receive POST requests.

  4. Optional: Add Headers

    Add custom headers if your endpoint requires authentication (e.g., Authorization: Bearer token).

  5. Optional: Add Secret

    Add a secret for signature verification. CatchIntent will sign each request so you can verify it’s authentic.

  6. Save and Test

    Save your webhook and use the Test button to send a sample payload.

After creating a webhook notification:

  1. Go to Listeners
  2. Edit the listener you want to trigger webhooks
  3. In the alerts section, select your webhook notification
  4. Save the listener

Each webhook POST contains:

{
"event": "signal.created",
"timestamp": "2025-01-09T12:00:00Z",
"data": {
"id": "sig_abc123",
"listener_id": "lst_xyz789",
"listener_name": "Product comparisons",
"platform": "reddit",
"community": "r/SaaS",
"title": "Looking for a Salesforce alternative",
"content": "Looking for a Salesforce alternative that's better for small teams...",
"author": "user123",
"relevance_score": 85,
"reasoning": "User is actively seeking alternatives to a competitor product",
"source_url": "https://reddit.com/r/SaaS/comments/...",
"created_at": "2025-01-09T11:55:00Z"
}
}
FieldDescription
eventEvent type (currently signal.created)
timestampWhen the webhook was sent
data.idUnique signal identifier
data.listener_idWhich listener triggered this
data.listener_nameHuman-readable listener name
data.platformreddit, hackernews, or bluesky
data.communitySubreddit or platform section
data.titlePost title
data.contentFull post content
data.authorWho posted it
data.relevance_score0-100 relevance score
data.reasoningAI explanation of why this matches
data.source_urlDirect link to original post
data.created_atWhen the post was created

If you configured a secret, each request includes a signature header:

X-CatchIntent-Signature: sha256=abc123def456...

To verify:

  1. Get the raw request body (before parsing)
  2. Compute HMAC-SHA256 using your secret
  3. Compare with the signature header
const crypto = require('crypto');
function verifySignature(body, signature, secret) {
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(body)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}

Failed deliveries (non-2xx response) are retried:

AttemptDelay
1st retry1 minute
2nd retry5 minutes
3rd retry30 minutes

After 3 failed attempts, the webhook is marked as unhealthy and you’ll be notified.

Create leads automatically in your CRM:

  • Salesforce
  • HubSpot
  • Pipedrive
  • Custom CRM

Send to additional channels:

  • Microsoft Teams
  • Custom mobile apps
  • Internal chat systems

Track signals in your data systems:

  • Data warehouses
  • Analytics platforms
  • Custom dashboards

Trigger workflows in automation tools:

  • Zapier
  • Make (Integromat)
  • n8n
  • Custom automation

Not receiving webhooks?

  • Verify your endpoint URL is correct and publicly accessible
  • Check that your endpoint returns a 2xx status code
  • Ensure the listener is active and connected to the webhook

Getting errors?

  • Check your server logs for the incoming request
  • Verify your endpoint can parse JSON
  • Ensure your endpoint responds within 30 seconds

Webhook marked unhealthy?

  • Check your endpoint is working
  • Review any recent changes to your server
  • Test the webhook again after fixing issues