Conditional Rules
Real-time Delivery
HMAC-SHA256 Signed
Auto-retry with Backoff

Webhooks That Think Before They Fire

Define conditional rules that evaluate every email event. Only receive the webhooks that matter to your business, not a firehose of every open and click.

No credit card required Visual rule builder included Recipe presets to start fast
The Problem

All-or-Nothing Webhooks Are Broken

Traditional ESPs give you a binary choice: subscribe to an event type and receive every single occurrence, or get nothing. Your endpoint drowns in noise while the signals you care about get buried.

Endpoint Overload

Every open, every click, every pixel load. A 50,000-recipient campaign generates hundreds of thousands of webhook calls your server has to process.

Client-side Filtering

You end up writing filtering logic on your end. Parse the payload, check conditions, discard 95% of events. That is wasted compute and engineering time.

Missed Signals

With no intent classification, you cannot distinguish a casual open from a hot lead. High-value signals look identical to noise in the firehose.

Event Types

Three Categories of Email Intelligence

From delivery confirmations to purchase intent, every event type can trigger conditional webhook rules.

Message Events

message.queued Email accepted and queued for delivery
message.delivered Email accepted by the recipient server
message.bounced Permanent delivery failure (hard bounce)
message.deferred Temporary failure, will retry automatically
message.failed Delivery failed after all retries exhausted
message.opened Recipient opened the email
message.clicked Recipient clicked a tracked link

Inbound Events

inbound.hard_bounce Permanent bounce detected, auto-suppression triggers
inbound.complaint Spam complaint received, auto-suppression triggers

Intent Signals

intent.impression Email viewed with minimal engagement
intent.engaged Meaningful interaction detected (dwell, scroll)
intent.hot_lead High purchase or conversion intent identified
intent.unmasked Anonymous recipient identity resolved
Rules Engine

Define Exactly When to Fire

Attach conditions to any webhook. MailOdds evaluates every event against your rules and only delivers when all conditions pass.

webhook-rule.json
{
  "event": "intent.hot_lead",
  "conditions": {
    "operator": "AND",
    "rules": [
      { "field": "heat_score", "op": "gt", "value": 5 },
      { "field": "intent_category", "op": "eq", "value": "PURCHASE_INTENT" },
      { "field": "is_human", "op": "eq", "value": true }
    ]
  },
  "url": "https://your-crm.com/hot-leads"
}

Available Condition Fields

heat_score Engagement intensity score (0-10) number
intent_category Classified intent: PURCHASE_INTENT, TECHNICAL_ISSUE, etc. string
urgency Urgency level (1-5) number
confidence Classification confidence (0.0-1.0) number
is_human Whether the interaction is from a real person boolean
environment Sending environment (production, staging) string
dwell_seconds Time spent viewing the email in seconds number

Comparison Operators

eq Equal to
neq Not equal to
gt Greater than
gte Greater than or equal
lt Less than
lte Less than or equal
in Value in array

Conditions support arbitrary AND/OR nesting for complex evaluation logic.

Recipes

Real-world Webhook Recipes

Start from a preset recipe and customize to your workflow. These patterns are available as one-click presets in the dashboard.

Slack hot-lead alert

Notify your sales team the moment a high-intent prospect engages.

Event intent.hot_lead
When heat_score > 7 AND intent = PURCHASE_INTENT
Then POST to Slack incoming webhook

CRM sync on engagement

Update your CRM contact record when a recipient reads deeply.

Event message.opened
When dwell_seconds > 30 AND is_human = true
Then PATCH CRM contact with engagement data

Zapier trigger on unmasking

Kick off a multi-step workflow when an anonymous lead is identified.

Event intent.unmasked
When confidence > 0.8
Then POST to Zapier catch hook

Auto-escalation to support

Route urgent technical issues directly into your ticket system.

Event intent.engaged
When urgency >= 4 AND intent_category = TECHNICAL_ISSUE
Then POST to support ticket API
Security

Secure and Reliable Delivery

Every webhook is cryptographically signed, automatically retried, and logged with a full audit trail.

HMAC-SHA256 Signing

Every delivery includes a cryptographic signature in the X-MailOdds-Signature header. Verify the payload is authentic and untampered before processing.

Automatic Retry

Failed deliveries retry with exponential backoff: 10s, 60s, 300s. After 50 consecutive failures, the hook auto-disables and you receive an email alert.

Delivery Audit Trail

Full log of every delivery attempt: request payload, response status, latency, and retry history. Inspect the trail from the hooks dashboard.

Secret Rotation

Rotate your webhook signing secret via the API without downtime. Both the old and new secrets are valid during a configurable overlap window.

Failure Notifications

Receive email alerts when webhooks are auto-disabled after consecutive failures. Re-enable with one click from the dashboard.

Timeout Handling

Endpoints must respond within 10 seconds. Slow responses are treated as failures and queued for retry. No events are lost.

Hook Scopes

Account Hooks and Domain Hooks

Two levels of webhook scoping to match how you organize your sending infrastructure.

Account-level Hooks

All plans
  • Fires for account-wide events: job.completed, job.failed
  • Up to 5 hooks per account
  • Simple event-type subscriptions without conditional rules
  • HMAC-SHA256 signed, auto-retry, full audit trail
RULES ENGINE

Domain-scoped Hooks

Pro plan and above
  • Per-domain event and intent signal filtering
  • Full conditional rules with AND/OR nesting
  • All message, inbound, and intent event types
  • Recipe presets and visual rule builder in the dashboard
  • Unlimited hooks per domain
Dashboard

Visual Rule Builder

Configure webhooks from the dashboard at /dashboard/settings/hooks. Build rules visually, start from recipe presets, and monitor delivery health in real time.

Visual
Rule builder
Presets
One-click recipes
Live
Delivery monitoring

Frequently Asked Questions

Stop drowning in webhook noise

Set up conditional rules that deliver only the events your systems need. Start with a recipe preset and customize from there.