# Zendesk

Create, update and find Zendesk tickets, reply and add internal notes, apply macros, and manage users and organizations.

## Connect Zendesk

1. In the sidebar, open **Connections** and press **Add connection**.
2. Type `zendesk` and choose **Zendesk**.
3. Choose **Sign in with Zendesk**.
4. Fill in **Subdomain**.
5. Press **Sign in with Zendesk** at the bottom of the sheet, then choose your account in Zendesk’s window and allow access.

Before you sign in, the sheet asks:

- **Subdomain · Required**: Your Zendesk subdomain: acme for acme.zendesk.com.

Or choose **Paste your API token**, fill in **Subdomain** and **API token**, and press **Test and save**. It stays until someone deletes it.

Enter your Zendesk subdomain (the part before .zendesk.com), then sign in with Zendesk, or enter an agent’s email and an API token (Admin Center › Apps and integrations › APIs › API tokens). The connection acts with that agent’s role; managing webhooks needs an admin.

**What if it says “Sign-in isn’t set up here yet”?**

Signing in with Zendesk needs a Zendesk app on this installation, and it has none yet. Until it is set up, **Paste your API token** works without it.

**On Cloud:** The sheet says “It’s set up once for everyone who uses this service, not by an organization.”

**Self-hosted:** An admin of the installation sees **Set up Zendesk sign-in** instead, and sets it up once for everyone. Everyone else sees who to ask.

1. Create an app in Zendesk’s developer settings ([Zendesk’s guide](https://support.zendesk.com/hc/en-us/articles/4408889192858)).
2. In GoRunner, copy the **Redirect address to add in Zendesk’s developer settings**, and add it to the app.
3. Paste the **Client ID** and **Client secret**, then press **Save and sign in**.

[Set up a sign-in app](https://docs.gorunner.io/self-host/oauth-apps#other-providers)

**Can I use my own Zendesk app?**

Yes. In the sheet, open **Use your own Zendesk app** and paste its **Client ID** and **Client secret**. Add the redirect address it shows to your app first. The connection then signs in through your app instead of the installation’s.

[Connections](https://docs.gorunner.io/build/connections) says how to sign in again, rename or delete it. In a product that embeds GoRunner, **Add connection** can be missing: then [your provider makes connections](https://docs.gorunner.io/embed/customer-connections) for you.

## Start a workflow

Add a trigger and choose **Zendesk**. The trigger uses the same connection as the steps.

### On Ticket Created or Updated

Starts when a Zendesk ticket is created or updated and matches the conditions below, or on the Zendesk events you pick. Publishing the workflow adds a webhook (and, for ticket created/updated, a trigger rule) to your Zendesk account: an admin's connection is needed, and unpublishing removes them. Every delivery's signature (HMAC-SHA256 under the webhook's own secret) is checked and an unsigned one is refused; a signed retry is accepted for up to 24 hours, and Zendesk's retry of a delivery starts no second run. Ticket created/updated gets the ticket's ids, status, priority, type, tags and times (read its subject and comments with Zendesk › Ticket › Get); Zendesk events get the whole ticket, user or organization and the change.

- **Trigger on · Required**: Which changes start a run. Ticket, user or organization events: the Zendesk events picked below. Options: Ticket created, Ticket updated, Ticket created or updated, Ticket, user or organization events. Default: Ticket created.
- **Zendesk events · Required**: Which Zendesk events start a run. The filters below narrow ticket events. Options: Ticket: created to Organization: external id changed (70 options). Shows when **Trigger on** is **Ticket, user or organization events**.
- **Status · Optional**: Only tickets with this status (after the change). Options: New, Open, Pending, On-hold, Solved, Closed.
- **Priority · Optional**: Only tickets with this priority. Options: Urgent, High, Normal, Low.
- **Type · Optional**: Only tickets of this type. Options: Problem, Incident, Question, Task.
- **Tag · Optional**: Only tickets that carry this tag.
- **Group · Optional**: Only tickets assigned to this group.

A later step can use its data, such as `{{trigger.change}}`, `{{trigger.current_user}}`, `{{trigger.event}}` and 4 more. See [Use data from earlier steps](https://docs.gorunner.io/build/use-data-from-earlier-steps).

## Do things in Zendesk

Add a **Zendesk** step, choose a **Resource**, then an **Operation**. Choose a row to see its fields.

- [Ticket](https://docs.gorunner.io/apps/zendesk#fields-f-ticket): Create · Get · Get Many · Update · Delete · Recover Suspended · Add Tags · Remove Tags
- [Ticket Comment](https://docs.gorunner.io/apps/zendesk#fields-f-comment): Add · Get Many
- [Attachment](https://docs.gorunner.io/apps/zendesk#fields-f-attachment): Upload · Get
- [Ticket Field](https://docs.gorunner.io/apps/zendesk#fields-f-ticketfield): Get · Get Many
- [User](https://docs.gorunner.io/apps/zendesk#fields-f-user): Create · Create or Update · Get · Get Many · Search · Update · Delete · Get Organizations · Get Related Data
- [Organization](https://docs.gorunner.io/apps/zendesk#fields-f-organization): Create · Get · Get Many · Update · Delete · Count · Get Related Data
- [Macro](https://docs.gorunner.io/apps/zendesk#fields-f-macro): Get Many · Get · Apply to Ticket
- [View](https://docs.gorunner.io/apps/zendesk#fields-f-view): Get Many · Get Tickets · Count Tickets
- [Search](https://docs.gorunner.io/apps/zendesk#fields-f-search): Search

Later steps read a step’s output by its name: see [Use data from earlier steps](https://docs.gorunner.io/build/use-data-from-earlier-steps).

## Limits

- A reply from Zendesk can be up to 16 MB (a file download can have its own limit). A larger one fails the step; it is never cut short.
- When Zendesk says to slow down (429), the step waits as long as it asks, if the step’s time allows. Otherwise it fails and says when to try again.

Not in your list? See [When an app isn’t here](https://docs.gorunner.io/apps/when-an-app-isnt-here#q-not-in-list).

## For developers

In the API, which calls apps pieces, Zendesk is `pieceId: "zendesk"` with `actionId: "zendesk"`, set by `resource` and an `operation_…` field, such as `operation_attachment`. Its trigger is `zendesktrigger` / `zendesk_ticket`. [Get an app](https://docs.gorunner.io/api/apps/get-app) returns every field.

It can change something outside the run (`writes_external`). See [How versions and side effects work](https://docs.gorunner.io/apps#q-versions).

### Zendesk › Ticket

### Create

- **Description · Required**: The ticket's first comment: what the requester asks.
- **Subject · Optional**: The ticket's subject line.
- **Status · Optional**: Empty: Zendesk's default (new) on create, unchanged on update. Options: New, Open, Pending, On-hold, Solved, Closed.
- **Priority · Optional**: Options: Urgent, High, Normal, Low.
- **Type · Optional**: A task can have a due date; an incident can be linked to a problem. Options: Problem, Incident, Question, Task.
- **Requester Email · Optional**: Who asks. Zendesk adds the person as an end user when the email is new. Empty on create: the connection's agent.
- **Requester Name · Optional**: The name for a requester Zendesk adds by email.
- **Assignee ID · Optional**: The agent the ticket is assigned to.
- **Assignee Email · Optional**: Or the assigned agent's email.
- **Group · Optional**: The group the ticket is assigned to.
- **Organization ID · Optional**: The organization the ticket belongs to (the requester must be in it).
- **Tags · Optional**: Tags, separated by commas. On update these REPLACE the ticket's tags; use Add Tags to keep the others.
- **External ID · Optional**: An id from another system, to find the ticket by.
- **Due At · Optional**: A task's due date and time (ISO 8601, such as 2026-11-07T17:00:00Z).
- **CC Emails · Optional**: Emails to copy on the ticket, separated by commas.
- **Custom Fields · Optional**: The ticket's custom field values by field id: {"360001234": "gold", "360005678": true} or [{"id": 360001234, "value": "gold"}]. Ticket Field › Get Many lists the ids.

### Get and Delete

- **Ticket Type · Optional**: A ticket, or a suspended ticket (one Zendesk held back as possible spam). Options: Ticket, Suspended ticket. Default: Ticket.
- **Ticket ID · Required**: The ticket's number, or its link in Zendesk.

### Get Many

- **Ticket Type · Optional**: A ticket, or a suspended ticket (one Zendesk held back as possible spam). Options: Ticket, Suspended ticket. Default: Ticket.
- **Status · Optional**: Only tickets with this status. Options: New, Open, Pending, On-hold, Solved, Closed. Shows when **Ticket Type** is **Ticket**.
- **Group · Optional**: Only tickets of this group. Shows when **Ticket Type** is **Ticket**.
- **Search · Optional**: More criteria in Zendesk's search syntax, such as "priority>normal tags:vip requester:ada@example.com". Empty: every ticket. Shows when **Ticket Type** is **Ticket**.
- **Sort By · Optional**: Return All with a status, group or search reads in the order tickets were created. Options: Updated, Created, Priority, Status, Type. Shows when **Ticket Type** is **Ticket**.
- **Sort Order · Optional**: Options: Ascending, Descending. Shows when **Ticket Type** is **Ticket**.
- **Return All · Optional**: Read every ticket, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many tickets to return (1–2000). Default: 50. Shows when **Return All** is off.

### Update

- **Ticket ID · Required**: The ticket's number, or its link in Zendesk.
- **Comment · Optional**: A comment to add with the update. Empty adds none.
- **Public Comment · Optional**: Off: the comment is an internal note only agents see. On by default.
- **Subject · Optional**: The ticket's subject line.
- **Status · Optional**: Empty: Zendesk's default (new) on create, unchanged on update. Options: New, Open, Pending, On-hold, Solved, Closed.
- **Priority · Optional**: Options: Urgent, High, Normal, Low.
- **Type · Optional**: A task can have a due date; an incident can be linked to a problem. Options: Problem, Incident, Question, Task.
- **Requester Email · Optional**: Who asks. Zendesk adds the person as an end user when the email is new. Empty on create: the connection's agent.
- **Requester Name · Optional**: The name for a requester Zendesk adds by email.
- **Assignee ID · Optional**: The agent the ticket is assigned to.
- **Assignee Email · Optional**: Or the assigned agent's email.
- **Group · Optional**: The group the ticket is assigned to.
- **Organization ID · Optional**: The organization the ticket belongs to (the requester must be in it).
- **Tags · Optional**: Tags, separated by commas. On update these REPLACE the ticket's tags; use Add Tags to keep the others.
- **External ID · Optional**: An id from another system, to find the ticket by.
- **Due At · Optional**: A task's due date and time (ISO 8601, such as 2026-11-07T17:00:00Z).
- **CC Emails · Optional**: Emails to copy on the ticket, separated by commas.
- **Custom Fields · Optional**: The ticket's custom field values by field id: {"360001234": "gold", "360005678": true} or [{"id": 360001234, "value": "gold"}]. Ticket Field › Get Many lists the ids.

### Recover Suspended

- **Ticket ID · Required**: The ticket's number, or its link in Zendesk.

### Add Tags and Remove Tags

- **Ticket ID · Required**: The ticket's number, or its link in Zendesk.
- **Tags · Required**: Tags, separated by commas. Zendesk keeps tags lowercase, with no spaces.

### Zendesk › Ticket Comment

### Add

- **Ticket ID · Required**: The ticket's number, or its link in Zendesk.
- **Comment · Required**: The comment's text.
- **Comment Is HTML · Optional**: On: the comment is HTML (links, lists, formatting). Off by default.
- **Public · Optional**: Off: an internal note only agents see. On: a reply the requester gets. On by default.
- **Author ID · Optional**: Who writes it (a user id). Empty: the connection's agent.
- **Attachments · Optional**: Attach one file per row, or switch the field to an expression to pass a whole list from an earlier step (such as {{steps.unzip.files}}). Each file is uploaded to Zendesk and attached to the comment (Zendesk takes up to 50 MB a file).
- **Upload Tokens · Optional**: Tokens of files already uploaded (Attachment › Upload), separated by commas.

### Get Many

- **Ticket ID · Required**: The ticket's number, or its link in Zendesk.
- **Return All · Optional**: Read every comment, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many comments to return (1–2000). Default: 50. Shows when **Return All** is off.

### Zendesk › Attachment

### Upload

- **File · Required**: Upload a file, or switch to an expression to use one from an earlier step (such as {{steps.download.result}}). Zendesk keeps an upload for 60 minutes, until a comment uses its token.
- **Add to Upload · Optional**: An upload token to add this file to, so one token carries several files.

### Get

- **Attachment ID · Required**: The attachment's id (a comment's attachments list it).

### Zendesk › Ticket Field

### Get

- **Ticket Field ID · Required**: The field's id.

### Get Many

- **Return All · Optional**: Read every ticket field, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many ticket fields to return (1–2000). Default: 100. Shows when **Return All** is off.

### Zendesk › User

### Create and Create or Update

- **Name · Optional**: The person's name. Required to create one.
- **Email · Optional**: The person's primary email. Create or Update finds the user by it (or by External ID).
- **Role · Optional**: Empty: end user on create, unchanged on update. Options: End user, Agent, Admin.
- **Phone · Optional**
- **Organization ID · Optional**: The person's (default) organization.
- **External ID · Optional**: An id from another system, to find the person by.
- **Alias · Optional**: The name shown to end users instead of an agent's real name.
- **Details · Optional**: Details about the person, such as an address.
- **Notes · Optional**: Notes only agents see.
- **Tags · Optional**: Tags, separated by commas (they replace the user's tags).
- **Time Zone · Optional**: such as Europe/Berlin.
- **Locale · Optional**: such as en-US or de.
- **Verified · Optional**: Mark the identity as verified, so no verification email is sent. Options: Verified, Not verified.
- **User Fields · Optional**: Values of the account's custom user fields by key: {"plan": "gold"}.

### Get, Delete and Get Related Data

- **User ID · Required**: The user's id, or their link in Zendesk.

### Get Many

- **Role · Optional**: Only people with this role. Options: End user, Agent, Admin.
- **Return All · Optional**: Read every user, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many users to return (1–2000). Default: 50. Shows when **Return All** is off.

### Search

- **Query · Optional**: Text or Zendesk search criteria: a name, an email, or "email:ada@example.com". Empty: search by External ID.
- **External ID · Optional**: Find the user with this external id instead.
- **Return All · Optional**: Read every user, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many users to return (1–2000). Default: 50. Shows when **Return All** is off.

### Update

- **User ID · Required**: The user's id, or their link in Zendesk.
- **Name · Optional**: The person's name. Required to create one.
- **Email · Optional**: The person's primary email. Create or Update finds the user by it (or by External ID).
- **Role · Optional**: Empty: end user on create, unchanged on update. Options: End user, Agent, Admin.
- **Phone · Optional**
- **Organization ID · Optional**: The person's (default) organization.
- **External ID · Optional**: An id from another system, to find the person by.
- **Alias · Optional**: The name shown to end users instead of an agent's real name.
- **Details · Optional**: Details about the person, such as an address.
- **Notes · Optional**: Notes only agents see.
- **Tags · Optional**: Tags, separated by commas (they replace the user's tags).
- **Time Zone · Optional**: such as Europe/Berlin.
- **Locale · Optional**: such as en-US or de.
- **Verified · Optional**: Mark the identity as verified, so no verification email is sent. Options: Verified, Not verified.
- **User Fields · Optional**: Values of the account's custom user fields by key: {"plan": "gold"}.

### Get Organizations

- **User ID · Required**: The user's id, or their link in Zendesk.
- **Return All · Optional**: Read every user, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many users to return (1–2000). Default: 50. Shows when **Return All** is off.

### Zendesk › Organization

### Create

- **Name · Optional**: The organization's name (unique in the account). Required to create one.
- **Details · Optional**: Details such as an address.
- **Notes · Optional**: Notes only agents see.
- **Domain Names · Optional**: Email domains, separated by commas: people with an email there join the organization.
- **Tags · Optional**: Tags, separated by commas (they replace the organization's tags).
- **External ID · Optional**: An id from another system.
- **Group · Optional**: New tickets from its people go to this group.
- **Shared Tickets · Optional**: Whether its people see each other's tickets. Options: Shared, Not shared.
- **Organization Fields · Optional**: Values of the account's custom organization fields by key: {"tier": "gold"}.

### Get, Delete and Get Related Data

- **Organization ID · Required**: The organization's id, or its link in Zendesk.

### Get Many

- **Return All · Optional**: Read every organization, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many organizations to return (1–2000). Default: 50. Shows when **Return All** is off.

### Update

- **Organization ID · Required**: The organization's id, or its link in Zendesk.
- **Name · Optional**: The organization's name (unique in the account). Required to create one.
- **Details · Optional**: Details such as an address.
- **Notes · Optional**: Notes only agents see.
- **Domain Names · Optional**: Email domains, separated by commas: people with an email there join the organization.
- **Tags · Optional**: Tags, separated by commas (they replace the organization's tags).
- **External ID · Optional**: An id from another system.
- **Group · Optional**: New tickets from its people go to this group.
- **Shared Tickets · Optional**: Whether its people see each other's tickets. Options: Shared, Not shared.
- **Organization Fields · Optional**: Values of the account's custom organization fields by key: {"tier": "gold"}.

### Count

Nothing to fill in.

### Zendesk › Macro

### Get Many

- **Active Only · Optional**: Only macros that are switched on. On by default.
- **Return All · Optional**: Read every macro, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many macros to return (1–2000). Default: 50. Shows when **Return All** is off.

### Get

- **Macro · Required**: The macro.

### Apply to Ticket

- **Macro · Required**: The macro.
- **Ticket ID · Required**: The ticket to apply the macro to.

### Zendesk › View

### Get Many

- **Return All · Optional**: Read every item, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many items to return (1–2000). Default: 50. Shows when **Return All** is off.

### Get Tickets

- **View · Required**: The view.
- **Return All · Optional**: Read every item, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many items to return (1–2000). Default: 50. Shows when **Return All** is off.

### Count Tickets

- **View · Required**: The view.

### Zendesk › Search

### Search

- **Find · Required**: What to search. Options: Tickets, Users, Organizations, Groups. Default: Tickets.
- **Query · Required**: Zendesk search syntax, such as "status\<solved assignee:none" or "created>2026-10-01".
- **Sort By · Optional**: Return All (or a Limit above 1,000) reads in the order things were created. Options: Updated, Created, Priority, Status, Type.
- **Sort Order · Optional**: Options: Ascending, Descending.
- **Return All · Optional**: Read every result, page by page (at most 2000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many results to return (1–2000). Default: 50. Shows when **Return All** is off.

Source: https://docs.gorunner.io/apps/zendesk
