
A few quality of life updates for webhooks in Zendesk
Webhooks in Zendesk automate tasks beyond triggers, integrating with external platforms. Recent updates enable firing webhooks for ticket, user, and org events. This shift, along with features like Action Builder and Copilot, moves Zendesk workflows beyond triggers for better automation.
As most of you know, I'm a big fan of using webhooks in Zendesk. Well, fan might be a bit too excessive a definition, but once you know how to use them you can automate a lot of cool things with the platform that aren't possible with regular triggers and automations.
Webhooks, for those that don't know, allow you to call external platforms and urls from within the Zendesk platform. They're useful for sending out notifications to e.g. Slack, alert your CRM of a new customer is created, update your data warehouse once a ticket is resolved, or for calling Zendesk's own API to update ticket data that's not easily updatable via triggers.

Webhooks
Over the years I've written a series of articles that get you started with Zendesk webhooks:



All of the examples I've listed about are webhooks that are invoked via triggers and automations. They react to tickets being created and updated – with optional conditions being added – and invoke a webhook with a custom payload.

Reacting to updates to other object types
Triggers for ticket updates is not the only scenario where webhooks can come in use. There's also custom objects (Service Contract is expiring, better alert the customer for an upcoming renewal), users (new user created, let's add him to our CRM) or organizations (and alert the account manager), or updates to help center articles that might warrant a connection to an external platform.
Last year Zendesk added a series of new events that could fire webhooks to Admin Center, allowing you to react to updates to users, agents, organizations, omnichannel routing and plenty of other events on the platform.

These give Zendesk Admins an easy way to integrate the platform into the wider ecosystem of software used in their company, with limited development effort.
If you want some inspiration on what's possible, take a look at the articles below:


One important difference between trigger based webhooks and these native Zendesk events is that there's no conditions like you have with triggers . If you fire a webhook upon user creation, it'll fire for every user created, and it's the receiving webhook that can, or should, filter the incoming requests.
{
"type": "zen:event-type:user.created",
"account_id": 123456789,
"id": "abb40a1b-f6d0-4d56-9602-99918f379ecb,
"subject": "zen:user:0987654321",
"time": "2025-04-08T16:47:23Z",
"zendesk_event_version": "2022-06-20",
"detail": {
"created_at": "2025-04-08T16:47:20Z",
"email": "bruce.wayne@gothamcity.com",
"external_id": "THX-1138",
"default_group_id": "0",
"id": "11223344556677",
"organization_id": "0",
"role": "end-user",
"updated_at": "2025-04-08T16:47:20Z"
}
}
Example payload sent after a zen:event-type:user.created event
Ticket Events
As discussed above, firing off webhooks via triggers is quite useful in many scenarios ranging from updating internal Zendesk objects, to notifying external platforms.
When creating webhook integrations for customers I do find myself often creating just stub triggers. Dump triggers that fire upon every ticket creation/update/change without any complex conditions or filters. Especially in scenarios where you want to use those webhooks as some kind of event firehose that connects to a bigger data repository, or for logging purposes, or in scenarios where you want to look at the possibility of enriching ticket data for any update.
In those scenarios you end up with potentially dozens of small triggers that clutter up your trigger list. Luckily with a recent update to webhooks this "issue" is not resolved.

You can now fire off webhooks for any ticket event directly from the webhook interface, without the need of creating an additional trigger. It's a small quality of life update, but makes it easier to manage triggers and webhooks alike.
Webhooks can fire for the following ticket events:
Native Ticket Events
- Any ticket events: for any change
- Agent assignment changed: A ticket was reassigned to another agent in Zendesk
- Attachment linked to comment: An attachment was linked to a ticket comment in Zendesk
- Attachment redacted from comment: An attachment was permanently removed from an existing comment on a ticket
- Brand change: The brand associated with the ticket was changed
- Email CCs changed: Users were added or removed from a ticket
- Comment created: A comment was added when creating or updating a ticket
- Comment made private: A private comment was created on a ticket
- Comment redacted: Words or strings were permanently removed from a ticket comment
- Custom field changed: The value of a custom field was changed
- Custom status changed: The ticket custom status was changed
- Description changed: The description in the ticket was changed
- External ID changed: The external ticket ID was changed
- Followers changed: Followers on a ticket were changed
- Group assignment changed: A ticket was reassigned to another group of agents
- Ticket marked as spam: A ticket was marked as spam
- Organization changed: The organization in the ticket was changed
- Priority changed: The priority on a ticket was changed
- Problem link changed: The problem ID associated with an incident type ticket was changed
- Requester changed: The requester of a ticket was changed
- Schedule changed: The schedule of an existing ticket was changed
- SLA policy Changed: The SLA policy of an existing ticket was changed
- Status changed: The status of the ticket was changed
- Subject changed: The subject of an existing ticket was changed
- Submitter changed: The submitter of an existing ticket was changed
- Tags changed: The tags on an existing ticket was changed
- Task due at changed: The task due date and time on a ticket was changed
- Ticket created: A ticket was created
- Form changed: The ticket form was changed
- Ticket merged: A ticket was merged
- Ticket permanently deleted: A ticket was permanently deleted
- Ticket soft deleted: A ticket was soft deleted
- Ticket type changed: The ticket type was changed
- OLA policy changed: The operational-level agreements (OLA) policy of an existing ticket was changed
And, just like with the other Zendesk events, you get any event that matches your chosen event types, and it's the receiving webhook that can and should filter the incoming payloads.
{
"account_id": 22129848,
"detail": {
"actor_id": "8447388090494",
"assignee_id": "8447388090494",
"brand_id": "8447346621310",
"created_at": "2025-01-08T10:12:07Z",
"custom_status": "8447320465790",
"description": "ticket_info_desc_2294a6e9ece2",
"external_id": null,
"form_id": "8646151517822",
"group_id": "8447320466430",
"id": "5158",
"is_public": true,
"organization_id": "8447346622462",
"priority": "LOW",
"requester_id": "8447388090494",
"status": "OPEN",
"subject": "ticketinfo_2294a6e9ece2",
"submitter_id": "8447388090494",
"tags": [
"ticket-info-test-tag"
],
"type": "TASK",
"updated_at": "2025-01-08T10:12:07Z",
"via": {
"channel": "web_service"
}
},
"event": {},
"id": "cbe4028c-7239-495d-b020-f22348516046",
"subject": "zen:ticket:5158",
"time": "2025-01-08T10:12:07.672717030Z",
"type": "zen:event-type:ticket.created",
"zendesk_event_version": "2022-11-06"
}
Example of the Ticket Event payload taken from developer.zendesk.com
I've already updated my Spam filtering workflow. A new webhook now notifies my Cloudflare Worker on zen:event-type:ticket.marked_as_spam
events for any ticket I manually map as spam. The worker then runs some regex on the ticket contents, and adds unique elements like the subject to the list it uses for future spam filtering. Makes the whole flow self-improving and, hopefully, even more efficient.
Messaging Events
Alongside the new Ticket events, there's also a short list of new Messaging events added. Honestly, can't think of any uses for these events yet, but if you have some ideas, please add them to the comments below!

Conclusion
These updates might seem like small convenience updates for workflows that can already be accomplished via traditional triggers, but it does feel like another piece in a bigger puzzle.
Traditionally triggers and automations were the core of any Zendesk workflow. Any (re)action to a ticket update was handled via triggers, and they were the only way to actively update these tickets.
But over the last few months it seems Zendesk is moving a lot of the responsibilities that used to be owned by triggers away from them.
Example 1: Assignment.
Where ticket routing and assignment was usually done by triggers, we now see them being shifted towards Omnichannel routing and Queues.

Example 2: Copilot Procedures
We used to use a combination of macros and triggers to update tickets based on certain conditions. But with the arrival of Agent Copilot a lot of the actions done on a ticket like automated comments, escalation to external APIs, updating ticket fields e.a. are now all done based on procedures and actions.
We can even invoke the Zendesk API via Copilot Actions, so things where we used to use internal webhooks and triggers, can now become procedures and actions.

Example 3: Action Builder
The final nail in the coffin for triggers might be the arrival of Action Builder. This new announcement from Zendesk Relate 2025 offers a visual workflow builder that can react to ticket updates and execute actions on both tickets and external platforms. If you think: hey, that sounds like a visual trigger builder.. you and I should become friends and have a coffee!

So what's left for triggers once Zendesk Admins (and Zendesk itself) shifts those responsibilities away from them? Notifying customers over email is one. Calling native functions like CSAT, side conversations or lookup fields is two. Can't really think of a three.
To be honest, I kinda like this. Anyone who manages big complex environments in Zendesk knows the issues that come with triggers. We've all followed the breadcrumbs of interlinked and overly complex trigger setups with complex IF NOT and ELSE conditions. Moving these towards the new action builder with its nested conditions seems so much better.
Similarly, combining webhooks and events in one logical element will also make management of these easier to grasps. And if I can have one feature request? I'd love just a few filters on these native Zendesk events. Just to reduce unwanted traffic across the network.