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.
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.
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 deliverymessage.delivered Email accepted by the recipient servermessage.bounced Permanent delivery failure (hard bounce)message.deferred Temporary failure, will retry automaticallymessage.failed Delivery failed after all retries exhaustedmessage.opened Recipient opened the emailmessage.clicked Recipient clicked a tracked linkInbound Events
inbound.hard_bounce Permanent bounce detected, auto-suppression triggersinbound.complaint Spam complaint received, auto-suppression triggersIntent Signals
intent.impression Email viewed with minimal engagementintent.engaged Meaningful interaction detected (dwell, scroll)intent.hot_lead High purchase or conversion intent identifiedintent.unmasked Anonymous recipient identity resolvedDefine Exactly When to Fire
Attach conditions to any webhook. MailOdds evaluates every event against your rules and only delivers when all conditions pass.
{
"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) numberintent_category Classified intent: PURCHASE_INTENT, TECHNICAL_ISSUE, etc. stringurgency Urgency level (1-5) numberconfidence Classification confidence (0.0-1.0) numberis_human Whether the interaction is from a real person booleanenvironment Sending environment (production, staging) stringdwell_seconds Time spent viewing the email in seconds numberComparison Operators
eq Equal toneq Not equal togt Greater thangte Greater than or equallt Less thanlte Less than or equalin Value in arrayConditions support arbitrary AND/OR nesting for complex evaluation logic.
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.
intent.hot_leadheat_score > 7 AND intent = PURCHASE_INTENTCRM sync on engagement
Update your CRM contact record when a recipient reads deeply.
message.openeddwell_seconds > 30 AND is_human = trueZapier trigger on unmasking
Kick off a multi-step workflow when an anonymous lead is identified.
intent.unmaskedconfidence > 0.8Auto-escalation to support
Route urgent technical issues directly into your ticket system.
intent.engagedurgency >= 4 AND intent_category = TECHNICAL_ISSUESecure 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.
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
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
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.
Frequently Asked Questions
Beyond Webhooks
Email Sending API
Transactional and campaign email delivery with built-in validation.
Transactional Email
Order confirmations, password resets, and shipping notifications with zero bounces.
Email Campaigns
A/B testing, scheduling, and post-send analytics with built-in list validation.
Ecommerce Tracking
Full-funnel attribution from email click to purchase with a privacy-first web pixel.
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.