DenchClaw Webhooks: Connect to Any External Service

How DenchClaw webhooks let you trigger external services when CRM events happen — Slack alerts, Zapier flows, custom integrations.

Mark Rachapoom
Mark Rachapoom
·6 min read
DenchClaw Webhooks: Connect to Any External Service

DenchClaw's webhook system lets your workspace send HTTP requests to external services when CRM events happen — and receive incoming webhooks from external services to trigger AI actions. Connect DenchClaw to Slack, Zapier, Make, Linear, GitHub, or any service with a webhook interface, without writing custom integration code.

Outbound Webhooks: DenchClaw → External Services#

Outbound webhooks fire when something happens in your DenchClaw workspace. Configure them in Settings → Integrations → Webhooks, or via the AI.

Setting Up an Outbound Webhook#

"Send a Slack message to #sales-wins whenever a deal status changes to 'Closed Won'."

DenchClaw sets up a webhook listener for the entry:updated event on the Deals object where Status = "Closed Won", then fires a POST request to your Slack webhook URL.

Or configure directly:

# In workspace/webhooks.yaml
outbound:
  - name: Slack Sales Wins
    trigger:
      event: entry:updated
      object: deals
      conditions:
        - field: Status
          operator: equals
          value: Closed Won
    url: https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK
    method: POST
    payload_template: |
      {
        "text": "🎉 Deal closed: {{entry.Deal Name}} — ${{entry.Deal Value}} with {{entry.Company}}"
      }
    enabled: true

Supported Trigger Events#

Events that can trigger outbound webhooks:

EventDescription
entry:createdNew entry created in an object
entry:updatedEntry field value changed
entry:deletedEntry deleted
entry:status_changedEntry status/stage changed
document:updatedEntry document edited
cron:completedScheduled task finished
agent:task_completedSubagent task finished
app:eventCustom event from a Dench App

Payload Templates#

Outbound webhook payloads use Handlebars-style templates:

{
  "deal_name": "{{entry.Deal Name}}",
  "value": "{{entry.Deal Value}}",
  "company": "{{entry.Company}}",
  "stage": "{{entry.Stage}}",
  "closed_at": "{{entry.updated_at}}",
  "workspace": "{{workspace.name}}"
}

Available template variables:

  • {{entry.*}} — any field value from the triggering entry
  • {{object.name}} — object name (e.g., "deals")
  • {{event.type}} — event type that triggered
  • {{workspace.name}} — your workspace name
  • {{timestamp}} — ISO 8601 current timestamp

Common Outbound Webhook Integrations#

Slack notifications:

URL: https://hooks.slack.com/services/...
Event: entry:created on leads
Payload: {"text": "New lead: {{entry.Full Name}} from {{entry.Company}}"}

Zapier trigger:

URL: https://hooks.zapier.com/hooks/catch/XXXXXXX/
Event: entry:status_changed on deals
Payload: full entry data (omit payload_template for full JSON)

Linear issue creation:

URL: https://linear.app/api/webhook
Event: entry:created on projects
Payload: {"title": "New project: {{entry.Project Name}}", "teamId": "..."}

GitHub issue:

URL: https://api.github.com/repos/org/repo/issues
Event: entry:created on bugs
Headers: {"Authorization": "token YOUR_GITHUB_TOKEN"}
Payload: {"title": "{{entry.Bug Title}}", "body": "{{entry.Description}}"}

Inbound Webhooks: External Services → DenchClaw#

DenchClaw can also receive webhooks from external services. Each inbound webhook has a unique URL that external services POST to.

Create an inbound webhook:

"Create an inbound webhook so that when a new form submission comes in from my Typeform, it creates a new lead in DenchClaw."

DenchClaw generates a unique URL:

https://YOUR_DENCHCLAW_INSTANCE/webhooks/inbound/abc123

Configure Typeform (or any form tool) to POST to this URL on submission. DenchClaw receives the payload and the AI processes it:

inbound:
  - name: Typeform Lead Capture
    slug: abc123
    action: |
      Parse the incoming Typeform payload.
      Create a new lead entry in the People object with:
      - Full Name from field "name"
      - Email from field "email"
      - Company from field "company"
      - Source = "Typeform"
      - Status = "Lead"
    enabled: true

Talk to Sales

Tell us about your team and we'll show you how Dench fits your workflow.

By submitting this form you agree to be contacted by our team. See our Privacy Policy and Terms of Service.

Inbound Webhook Processing#

The AI processes each inbound webhook payload according to your configured action. It can:

  • Create new CRM entries
  • Update existing entries
  • Trigger AI analysis
  • Send notifications
  • Trigger cron tasks

Because the action is written in natural language and executed by the AI, it handles messy real-world webhook payloads gracefully — field name variations, nested JSON, missing values, and so on.

Webhook Authentication#

Outbound Authentication#

Configure headers for authenticated outbound webhooks:

outbound:
  - name: GitHub Integration
    url: https://api.github.com/repos/org/repo/issues
    headers:
      Authorization: "token ${GITHUB_TOKEN}"
      Content-Type: application/json

Environment variables (like GITHUB_TOKEN) are stored in your workspace's .env file, not directly in the YAML.

Inbound Security#

DenchClaw verifies incoming webhook authenticity via:

  • HMAC signature verification — for services that sign payloads (GitHub, Stripe, Shopify)
  • Secret token — a shared secret passed in the request header
  • IP allowlist — restrict to known source IP ranges

Configure in the inbound webhook settings.

Using dench.webhooks in Apps#

Trigger webhooks from custom Dench Apps:

// Trigger an outbound webhook
await dench.webhooks.trigger("slack-sales-wins", {
  dealName: "Apex Corp",
  value: 25000
});
 
// Create a temporary inbound webhook
const webhook = await dench.webhooks.createInbound({
  name: "Temp Lead Capture",
  expiresIn: 3600000,   // 1 hour
  action: "Create a lead from the incoming data"
});
 
console.log(webhook.url);  // Use this URL in your form

See also: DenchClaw Event System for internal event handling, and DenchClaw Cron Scheduling for event-triggered scheduled tasks.

Frequently Asked Questions#

Can webhooks trigger AI tasks in DenchClaw?#

Yes. Inbound webhook actions are processed by the AI and can include any natural language instruction — create records, update fields, send notifications, trigger analysis, spawn subagents.

How do I debug a webhook that isn't firing?#

Check the webhook logs in Settings → Integrations → Webhooks → Logs. Each webhook event shows the trigger condition evaluation, the outbound request, and the response status code. For inbound webhooks, logs show the received payload and action execution result.

Can I test a webhook without a real event?#

Yes. In the webhook management panel, click "Send test event" to fire the webhook with sample data. Inbound webhooks have a "Test with payload" input where you can paste a sample payload and see how DenchClaw processes it.

Is there a rate limit on webhooks?#

DenchClaw doesn't impose rate limits on webhook processing. If you're triggering thousands of webhook events per minute (e.g., bulk imports), DenchClaw queues them and processes at a sustainable rate. External services may have their own rate limits.

How do I secure my inbound webhook URLs?#

Don't share inbound webhook URLs publicly. Each URL includes a random token in the path. For additional security, add HMAC signature verification matching your external service's signing method. DenchClaw supports SHA-256 HMAC verification with a configurable signing secret.

Ready to try DenchClaw? Install in one command: npx denchclaw. Full setup guide →

Related articles

Keep reading

View all