Enerflo 2.0 Event Filtering

Webhook filtering allows you to control exactly when a webhook fires by setting conditional rules on the event payload. Instead of receiving every webhook event, you can configure filters to only send webhooks when specific conditions are met.

Why Use Filtering?

Without filtering, subscribing to deal.updated.v2 sends a webhook for every field change: address updates, notes, stage navigation, everything. With filtering, you define rules that only deliver events matching your conditions.

Common use cases:

  • Fire only when a deal reaches a specific stage
  • Trigger when a field changes from one value to another
  • Route webhooks by sales rep or territory

How It Works

  1. An event occurs (e.g., a deal is updated)
  2. The system evaluates your filter conditions against the payload
  3. If conditions match, the webhook is sent
  4. If not, it's logged as "filtered" (not sent)

View sent and filtered webhooks in Settings > Webhooks > Jobs.

Setting Up Filters

Location

Settings > Webhooks > Manage Subscriptions → Create or edit a subscription → Conditions section

Testing Your Filters

Every webhook subscription has a Condition Tester:

  1. Paste a webhook job ID from a real event
  2. Click Test
  3. View result:
    • Pass - Webhook would send
    • Fail - Webhook would be filtered
    • ⚠️ Error - Invalid rule or bad job ID

Finding Job IDs

Settings > Webhooks > Jobs → View recent webhooks → Copy job ID

Example Patterns

Fire Once on Change

Fire only when a field becomes true, never again:

ALL group:
  - current.state contains "hasHOA": true
  - NOT group: previous.state contains "hasHOA": true

Fire Every Time a Field Changes

Fire whenever a specific field is modified, regardless of value:

ALL group:
 - changes.state contains "AddressHOA"

Fire While True, Stop After Condition

Fire on every update while true, stop when threshold is met:

ALL group:
  - current.state contains "wantsEfficiencyAdders": true
  - NOT group: current.state contains "hasFinishedAdders": true
  - NOT group: current.state contains "hasFinalizedProposal": true

Territory Filtering

Fire only for specific sales reps:

ANY group:
  - current.salesRep.id equals "rep-uuid-1"
  - current.salesRep.id equals "rep-uuid-2"