Back arrowAll guides

How to keep Zendesk ticket status in sync with Jira

Pixel art of scattered purple dots resolving into a linked graph of glowing nodes on a dark green background
Talton Figgins••7 min read

Neither Zendesk nor Jira updates the other's status field automatically. Linking a ticket to an issue, whether by pasting a URL in a comment or using a marketplace app, tells you the two are related. It does not make "Solved" in Zendesk follow "Done" in Jira, or the reverse. To get that, you build it yourself. Set up a Zendesk trigger that fires a webhook when the ticket's status changes, and a Jira automation rule that fires a webhook back when the issue transitions, so each one updates the other system through its API.

That's a real, working setup, and support and engineering teams build it often enough that it's a recurring topic on the Make and n8n community forums. It's also two automations watching each other, which means the first bug you'll hit isn't a missing sync, it's an infinite one.

Why there's no native two-way sync

Zendesk's ticket status lives on the ticket. Jira's issue status lives on the issue. Nothing in either product's data model treats them as one value with two mirrors. They're two separate fields that happen to describe the same piece of work. A Make community thread opened with the same ask. The original poster, Tobias_Safaie, wrote, "When a Zendesk ticket is created it should be creating an 'issue' in Jira. Any subsequent changes should be synced." A Make moderator's reply was conditional, not a flat no. If no suitable blueprint turns up in Make's template library, the moderator wrote, "you can create it yourself." That's the state of it across every automation platform, not just Make. You're wiring two field values together, not turning on a setting.

Building the two triggers

The mechanism is the same in both directions. Each side needs a condition on its status field, a webhook, and an API call that writes into the other system's status field.

Zendesk to Jira. Zendesk's trigger conditions support a status field with is, is_not, less_than, and greater_than operators against new, open, pending, hold, solved, or closed, per the Zendesk conditions reference. Pair a condition like "Status is Solved" with the notification_webhook action, which the Zendesk actions reference describes as sending "a message to an active webhook," and the trigger fires an HTTP request carrying the ticket ID and new status to whatever URL you register, typically a small relay that calls Jira's transition API.

Jira to Zendesk. Jira automation's trigger list includes a rule that fires when a work item transitions from one status to another. Pair that with the "Send web request" action, which the Atlassian automation actions docs describe as sending "an outgoing web request to notify another system when a flow is run," pointed at your relay, which calls Zendesk's Update Ticket endpoint with the mapped status.

Two triggers, two webhooks, one small service in the middle translating "Solved" to "Done" and back. That's the whole mechanism, and it's exactly what people are asking for help building on the n8n forum, in one thread about updating Zendesk from Jira status changes and a follow-up troubleshooting the sync breaking on comments specifically.

The loop you have to guard against

Wire both directions and you've built a cycle. Zendesk fires on status change, which updates Jira, which fires Jira's own trigger, which updates Zendesk, which fires Zendesk's trigger again. A responder on the n8n thread, ihortom, named the problem directly, warning that bidirectional syncing "can create an endless loop when Zendesk sync to Jira causes the workflow to update Zendesk back."

The fix is a guard condition on each trigger. Only fire the Jira-to-Zendesk automation if the new status didn't originate from the last Zendesk-to-Jira write, tracked with a tag, a custom field, or a short cooldown window on the relay. It's a few extra lines of logic, and it's also the first thing that breaks when someone changes the automation six months later and doesn't remember why the guard is there.

Where the two-webhook setup breaks down

The mechanics above hold for one ticket mapped to one issue with a status vocabulary that translates cleanly. Past that, the same gaps show up on most teams that build this:

  • Status vocabularies don't line up one-to-one. Zendesk's six statuses and a Jira workflow's board columns rarely map evenly; someone has to decide what "Pending" on the customer side means when the Jira board has both "Blocked" and "Waiting on customer," and that mapping table needs maintaining as either workflow changes.
  • One ticket, several issues. A ticket that spawns two Jira issues, or an issue that resolves three tickets at once, breaks the one-to-one assumption both trigger conditions are built on.
  • Manual moves don't announce themselves. Anyone dragging a card on the Jira board or changing a ticket's status by hand bypasses whatever "don't answer your own echo" guard you built, and the two systems drift silently until someone notices.
  • The requester gets lost at the boundary. The relay passes a status value and an issue key. It generally doesn't carry who asked, which company they're at, or what they were told last, so a status update lands in Jira with none of the context a support-side reader would want.

None of that means don't build it. For a small, stable status vocabulary and a team that rarely files a ticket against more than one issue, the two-trigger setup above is a reasonable week of work and it'll run quietly for a long time.

Where Modem fits

We're describing Modem here because it's what we build and sell, not because it's neutral information, so read the framing with that bias in mind. Modem doesn't run a webhook relay between Zendesk and Jira. It captures Zendesk tickets directly, including status, and it monitors and can act on Jira issues in the projects you connect, including their status. Both land in the same topic, so a ticket and the issue it caused sit next to each other with their statuses visible together, instead of you checking two dashboards or trusting a relay's mapping table to have run correctly.

The requester problem above is what this closes. The person and company behind the ticket stay attached to the topic through the Jira issue's whole life, splits and re-parenting included, so when engineering asks "does anyone remember why we're doing this," or a PM wants to notify whoever's still waiting, the answer doesn't depend on a status field someone forgot to update by hand. There's more on how that context survives handoffs in our guide on seeing who actually asked for a Jira epic or story, and on the Zendesk side specifically in mining feedback from Zendesk tickets. Modem is one credible way to close this gap; it isn't the only one, and the two-trigger build above is a legitimate alternative if your setup stays small.

Run the Zendesk side alone for two weeks

Pick one direction first, not both. Set up the Zendesk trigger and webhook alone, watching for "Status is Solved" on tickets tagged with your Jira issue key, and let it write a comment (not a status change) onto the linked issue. That gets engineering the signal without any loop risk, since nothing on the Jira side writes back yet. Add the return direction, with its guard condition, only once the one-way version has run cleanly for a couple of weeks and you've seen what your real status vocabulary needs to map.