How we picked
Webhooks are what you use when polling has already failed you. A team reaches for them because they're syncing tickets to a warehouse, paging on-call for a P1, triggering a provisioning workflow, or feeding a real-time dashboard — all cases where a fifteen-minute delay is unacceptable and hammering the API every minute is worse. That makes webhooks an infrastructure purchase, and we evaluated them the way you'd evaluate any event delivery system.
Event granularity came first. A platform that fires one generic "ticket updated" event for every field change forces you to diff payloads and filter noise on your side, which is both wasteful and error-prone. Intercom's topic-based subscriptions and Zendesk's event-type filtering both let you subscribe narrowly, which keeps your endpoint quiet and your logic simple.
Then delivery reliability, which is where marketing pages go silent. We looked for HMAC signing, documented retry schedules with backoff, and a delivery log with replay. These are unglamorous and they're the entire difference between an integration you trust and one you check manually every morning. Self-hosted Zammad earns its place here for a different reason: when you own the deployment, delivery reliability is your problem rather than a vendor's undocumented policy, which some teams strongly prefer.
What to prioritize
- Narrow event topics over a firehose. Subscribe to
conversation.rating.added, not "something changed." Fewer inbound requests, simpler handlers, less filtering logic you have to maintain.
- Payloads complete enough to act on. If the webhook only carries an ID, every event costs you an API call. At volume that turns your webhook consumer into your rate-limit problem.
- HMAC signature verification, enforced. Sign, verify, reject. An unsigned webhook endpoint is an unauthenticated write path into your systems.
- A documented retry schedule and a replay-capable delivery log. Ask specifically: how many retries, over what window, and can I replay from the UI? You'll need this the first time a deploy drops your endpoint.
- Idempotency and out-of-order tolerance in your handler. Deduplicate on event ID and never assume events arrive in the order they occurred. Both vendors and networks will violate that assumption.
- A queue between the webhook and your business logic. Accept, enqueue, return 200 fast. Doing real work inline means slow processing causes vendor-side timeouts and retries, which compounds the load exactly when you're already struggling.