Ask questions, share tips, and discuss best practices about apps and integrations, App builder, APIs, SDKs, ZAF, and Sunshine
Recently active
is Oauth token expiration for oauth using client credentials grant type also? I am trying to create a new OAuth client using client credentials to test token expiry and obtain new tokens. But get not a valid grant type error. Is the grant type restricted to only one oAuth client?URL used is url = "https://gsmls.zendesk.com/oauth/tokens”If i use the existing Oauth client to get token get below error“{"error":"unauthorized_client","error_description":"The authenticated client is not authorized to use the access grant “
Hi allI’ve read and re-read the Action Flows articles and tried to make some basic ones of my own but I just don’t understand what I’m doing wrong or what all the technical terms mean. I’m not a developer, I’m an admin trying to build basic things like “If a ticket has a specific tag added to it, add this task list to it” but I just can’t figure it out. The inputs, variables and all the other things are so complicated to understand.I don’t see an Academy course for Action Flows and all the videos I can find that talk about it are very high level and don’t explain everything that I’m seeing. Is there any content I’m missing or can an Academy course be made for this? I like to think I’m at least of average intelligence but I just can’t wrap my head around Action Flows!Thanks!
Problem StatementThe iFrame app is a ticket sidebar application that provides embedded access to external web content directly within the ticket context. It dynamically renders a configurable URL inside the sidebar, allowing agents to interact with external tools and workflows without leaving the ticket view. Location: nav bar. PromptCreate a nav_bar app called "Iframe" that embeds an admin-configured external website inside Zendesk Support, allowing agents to quickly navigate to an external resource and return to their tickets without interrupting their workflow.The app requires one install-time setting: **Iframe URL** (parameter name `iframeURL`, type: url, required). This is the external website address the admin enters during installation. On load, retrieve the setting by calling `const metadata = await zafClient.metadata()` and reading `metadata.settings.iframeURL`. Do NOT use `zafClient.get('setting.iframeURL')` — that is not a valid ZAF path and will throw an APIUnavailable erro
When support teams work in Zendesk and engineering teams work in Jira, the integration between both platforms becomes critical to ensure the success of service delivery. A customer issue reported in Zendesk often needs an engineering investigation of Jira team. Status updates, priorities, comments, attachments, and resolution details need to move between both systems without the need for manual data entry.The native Zendesk–Jira integration is a useful starting point. It helps teams create Jira work items from Zendesk tickets, link existing Jira issues to support tickets, view Jira details inside Zendesk, and share updates between both platforms.For simple workflows, that may be enough.But as teams scale, support and engineering collaboration usually becomes more complex. Organizations start using custom fields, Problem and Incident tickets, advanced Jira workflows, multiple projects, different priority models, and stricter reporting requirements. That is where the native integration c
Problem StatementThe Print Ticket History app provides bulk ticket export and print functionality directly within Zendesk Support. It allows agents and admins to search for tickets by user criteria, select individual or multiple tickets, and export them as a PDF, with an option to hide internal notes from the printed output. Location: nav bar. PromptCreate a `nav_bar` app called "Print Ticket History" that lets agents search Zendesk Support tickets by requester (name or email), select a batch with checkboxes, and download those tickets as PDFs (a single PDF for one ticket, a ZIP archive for multiple). Match the exact behaviours, layout, and PDF format described below — earlier builds got several details wrong, so the wording here is deliberately strict. **App settings**1. Add exactly one install-time parameter in `manifest.json`: ```json { "name": "hide_internal_comments", "type": "checkbox", "default": false, "required": false } ``` The `type` MUST be `checkb
Problem StatementThe Project Management app is a ticket sidebar application that provides parent-child ticket relationship management directly within the ticket view. It allows agents to create and link child tickets to a parent ticket, enabling teams to break down complex support requests into smaller, trackable sub-tasks without leaving the active ticket. Location: ticket sidebar PromptCreate a ticket_sidebar app called "Project Management" that turns any Zendesk ticket into a project parent, creates linked child tickets (one per group), groups them by a shared `external_id` and a custom field value, and lets agents view, create, link, and remove project tickets from the sidebar. Define eight app parameters in the manifest so they appear on the app's installation settings screen:- `Custom_Field_ID` (type: text, required) — labelled "Custom Field ID". Help text: "ID of the custom ticket field used to store the project identifier." Key name uses underscores and mixed case exactly as sh
Problem StatementThe Sidebar Search app is a ticket sidebar application that provides in-context search functionality directly within the ticket view. It allows agents to search across tickets, articles, comments, users, and organizations in their Zendesk without leaving the active ticket, with support for both basic keyword search and advanced filters such as ticket status, date ranges, and assignee. Locations: ticket sidebar, new ticket sidebar PromptCreate a ticket_sidebar app called "Sidebar Search" that lets agents search their Zendesk Support instance for tickets, users, and organizations directly from the ticket sidebar, with both basic and advanced search options including status filters, date ranges, assignee filtering, and brand filtering. Add two settings to the app so admins can configure them during installation:- `custom_fields` — labelled "Custom field IDs". Help text: "If you would like the app to suggest the value of custom ticket fields, specify their IDs here, separa
Thanks to some great feedback from a community member in Reddit, I learned that a desired capability for Zendesk Voice is to be able to pre-schedule changes to voice/IVR greetings. That member described a great problem statement: on a company holiday, they must still log into Zendesk and manually flip their voice greeting from one to another to acknowledge the holiday, interrupting their own day off. I noticed that greetings can be managed via API, which led me to try and experiment with managing them via an App Builder app. I prompted App Builder to build an app that let me:Pre-schedule changes to my greetings, including a date and time Schedule recurring changes to my greetings, such as flipping to a weekend greeting every Friday View, edit, and manage upcoming scheduled changes before they execute Track historical updates made via schedule, including the Admin who scheduled the changeI opted for a sidebar app, which laid out the Scheduled, Historical, and Recurring changes quite wel
If you've been trying to authenticate a Custom Action using your own Zendesk account as the OAuth provider, here's a step-by-step guide on how to get it working that I got from support. I couldn’t find a good single resource on how to do this especially with the announcement of API Tokens going away so wanted to share with the larger community. This is for how to get the “Connection” setup for Action flows but would likely work for other areas to be used to replace webhook actions as well. Step 1: Create the Zendesk OAuth ClientGo to Admin Center > Apps and Integrations > APIs > OAuth clients and click "Add OAuth client".Configure it with the following:Set Client kind to Confidential Set the Redirect URL to: https://zis.zendesk.com/api/services/zis/connections/oauth/callback(Note: the subdomain is always zis, not your own account's subdomain) Copy the Secret value and store it somewhere safe — you'll need it in Step 2(For a full reference on each field, see: Using OAuth authen
What are we building?This app shows your assets and allows for a .CSV export file. Performance may be dependent upon how large your asset inventory is, so be mindful of that when building.Why are we building this?Currently, assets can only be pulled out of Zendesk through an API. For users who are uncomfortable using an API this can be a challenge.Screenshot: Prompt: List all of my assets (use GET /api/v2/it_asset_management/assets)Include pagination options for large inventories.List them in a table with configurable and sortable columns. Ability to click on an asset and see expanded view of more fields and related events and tickets. have an "Export" button on the main table that allows for a CSV export of the main table. assets will return a user ID in user_ID, and a status id in status_id. Use v2/it_asset_management/statuses to map status_id to status name.Use v2/users/show_many?ids= to map user_id to user nameIf a user_id doesn’t return an object, render as “Deleted User” in app
I am Admin for our ZD instance, and I work on the business side, not IT. Back in a former life, I was a software engineer, but not anymore. So I use Power Automate when I need to do code-like things. I have a number of Power Automate flows that invoke the ZD API (via the HTTP action) and teach myself the API via Postman. Auth for both Power Automate and Postman uses API keys.API key auth is being eliminated for Support.I have no idea how to transition to OAuth for my needs. There is not documentation that provides me any guidance. I have no experience with OAuth, and this looks like something I’ll need IT assistance to set up - but I have no idea what to even ask for. Can someone provide me some guidance?Note that Exploring Zendesk APIs with Postman on the ZD developer website instructs to use API key auth for Postman.
pls help what ErrorMessage I will get when JWT token is expired? "401" or "HTTP 401" or something else?"The most common errors encountered are HTTP 401 unauthorized errors or expiration errors caused by using a JWT with an expired timestamp. In this case, a new JWT should be generated and a call made to LoginAsync."
I am using a Python script that exports (to CSV) a set of tickets using the Search API (/v2/search.json). In my script, I'm also making a call to get all ticket comments and combine into a single field (/v2/tickets/{ticket_id}/comments.json. For the majority of the tickets/comments, everything exports as it should and all comments combine, but it looks like that if a ticket has a quite large amount of comments, when exported to CSV, it overflows to multiple lines below the ticket and makes the ticket data unusable. I've included a screenshot (with some content hidden) to give you an idea of what is happening. I have tried getting the comments by using 'body' & 'html_body', but it doesn't make a difference. Any thoughts on this? Is there a limitation in how many characters can be included in Excel and/or a CSV column?
Hello, I noticed that I can't seem to revoke/delete an oauth token via the API. I am using an authorization token with full access. I try:curl https://$ZENDESK_SUBDOMAIN.zendesk.com/api/v2/oauth/tokens.json -v -u $ZENDESK_EMAIL/token:$ZENDESK_API_TOKEN And I get a page of results like{"tokens":[{"url":"https://xyz.zendesk.com/api/v2/oauth/tokens/1234567890.json","id":1234567890,...If I then do:curl https://$ZENDESK_SUBDOMAIN.zendesk.com/api/v2/oauth/tokens/1234567890 -v -u $ZENDESK_EMAIL/token:$ZENDESK_API_TOKENI get{"error":"RecordNotFound","description":"Not found"}I tried using the OAuth Client page in the admin, found the token I was interested in by paging through lots of pages manually (you need a better UI on the Oauth Client > View Tokens page), but I found it, and tried to delete from there. It did not delete there, either, I also got a 404 I tried another token and was able to get it. I didn't want to actually delete it, so I just retreived it, but I did no
Hallo zusammen, wir möchten gerne über unser Externes System bestimmt Mail bzw. Tickets über die API vorbereiten. Auch neue Tickets erstellen, aber noch nicht an den Kunden versenden. Leider gibt es von Zendesk keine direkte Möglichkeit dafür. Hat jemand eine Idee wie man so etwas realisieren kann?Danke
My team is currently integrating the messaging mobile SDKs. While doing so on iOS we encountered an unexpected presentation behavior.According to the documentation https://developer.zendesk.com/documentation/zendesk-web-widget-sdks/sdks/ios/getting_started/#presenting-the-conversation-modally this is how we should display the messaging screen modally:if let viewController = Zendesk.instance?.messaging?.messagingViewController() { let navigationController = UINavigationController(rootViewController: viewController) navigationController.modalPresentationStyle = .fullScreen present(navigationController, animated: true)}Our app is a pure SwiftUI app, so we had to wrap it in a UIViewControllerRepresentable.When we do so, the user has no button at all to close the modal, nevertheless which exitAction we pick for showMostRecentConversation screen.So we had to add a close button to the toolbar of the SwiftUI View wrapping the Zendesk content. But then we end up with two navigation bar
Hi, I'm developing an app and I was wondering how to open the other tickets in the same browser tab and open a new tab in Zendesk. Now I have linked to the other tickets in the interaction history, but when the user clicks on the links to the tickets, it opens in a new browser tab.Like this: I want it to open like this: Whats the code for this? Thanks for help in advance!
Hello, could you please help me?I’m using Zendesk SDK 4.2.2 for Unity. I log in using a token with: ZendeskSdk.Instance.Messaging.LoginAsync(response.Token); After that, I request an unread message count update with: ZendeskSdk.Instance.Messaging.GetUnreadMessageCountAsync(ZendeskUpdatedMessage); I receive the update once, but after that I no longer get unread message count updates automatically. The only way to get a new update is to send the request again manually. Is this expected behavior, or is there a way to subscribe to continuous unread message count updates/events?Could you please clarify what these parameters in GetUnreadMessageCountAsync mean? onUnreadCountChanged (Action): Action to be called when the unread count changes. shouldSubscribe (bool): Whether to subscribe to the websocket event outside of a conversation. My understanding was that onUnreadCountChanged would be triggered automatically whenever the unread message count changes, especially when shouldSubscribe is se
Problem StatementThe Assignment Control app is a ticket sidebar application that provides targeted visibility controls for the ticket assignee dropdown. It dynamically hides specific agents and groups based on configurable targeting rules, such as the current agent's role, group membership, ticket attributes etc. Locations: ticket sidebar, new ticket sidebar PromptCreate a ticket_sidebar app called "Assignment Control" that hides specific agents and groups from the ticket assignee dropdown, based on whether the current agent matches configurable targeting rules.Define six app parameters in the manifest so they appear on the app's installation settings screen (all type: text, all optional):`hidden_user_ids` — labelled "Hidden users". Help text: "A comma-separated list of user IDs to be hidden from the Assignee dropdown." `hidden_group_ids` — labelled "Hidden groups". Help text: "A comma-separated list of group IDs to be hidden from the Assignee dropdown." `targeted_user_ids` — labelled
We figured out a way to add CCs to a ticket based on conditions defined in a trigger. First, you need to set up a webhook with the endpoint https://<company-name>.zendesk.com/api/v2/tickets/{{ticket.id}}.json as JSON/PUT request. Then, you can define a trigger with your conditions that calls the webhook ("Update active webhook") and sends the following JSON data: { "ticket": { "email_ccs": [ { "user_id": "123456789", "action": "put" }, { "user_id": "987654321", "action": "put" } ] }} You can use the Zendesk API to query the appropriate user IDs. You may also configure another webhook to put a comment into the ticket notifying your agents about the change: { "ticket": { "comment": { "body": "new CCs added", "public": false } }} Please note that the trigger should probably not act on "Ticket is updated" because that might cause an infinite loop wit
Let's be honest: Most Zendesk migrations fail the same way.It’s rarely because the tools are broken or the underskilled teams. It's because someone, somewhere, treated the whole thing of enterprise data migration like an export-import task. They only realize the mistake when the "New Help Desk" goes live and suddenly: tickets are missing context, SLA timestamps have evaporated, and agents can't piece together a customer’s history.That's an expensive way to learn a lesson. This enterprise migration checklist exists so you don't have to be the one explaining to the CTO why six months of data just vanished.Why Enterprise Data Migration Needs a ChecklistHere's the thing about enterprise data migration: the risks aren't usually technical. They're structural.You’re dealing with API throttling that kills your progress mid-transfer. You’re fighting SLA timestamps that won't survive a schema change. You’re managing parent-child ticket relationships that arrive broken, or user identities that tu
Hello.. I'm using "client.on("ticket.conversation.changed", func)" in my app, to capture the conversation changes.. But, I'm facing some issues in that.. That function triggers multiple times, when a single message came.. (ie), When user sends a message means, that function triggers multiple times (sometimes more than 40 times), so that it captures the conversation data multiple times.. Therefore, It slows down my app functionality.. So, I need to control that triggering event only once, when new message came or any conversation changes happen.. Can you please suggest any ideas to control or off that conversation listener, when function not called.. I just tried with "client.off("ticket.conversation.changed")", But, its not working.. Looking forward for solutions.. Thank you..
Hi. We are using: ZendeskSDK 3.15.0ZendeskSDKConversationKit 13.2.0 We observe the crashes, could you please support? Crashed: com.apple.root.default-qosEXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x00000009a3c36598 Crashed: com.apple.root.default-qos0 libobjc.A.dylib 0x5dac objc_class::realizeIfNeeded() + 241 libobjc.A.dylib 0x5ea8 objc_destructInstance + 362 libswiftCore.dylib 0x399838 swift_deallocClassInstance + 1123 libswiftCore.dylib 0x39978c _swift_release_dealloc + 564 libswiftCore.dylib 0x39a700 bool swift::RefCounts<swift::RefCountBitsT<(swift::RefCountInlinedness)1>>::doDecrementSlow<(swift::PerformDeinit)1>(swift::RefCountBitsT<(swift::RefCountInlinedness)1>, unsigned int) + 15
A nav bar app that gives your support team a single place to understand how macros are being used and to browse all Chat shortcuts. It lives in the left-side navigation bar so agents and admins can access it at any time, independent of any open ticket.The app has two tabs:Macros usage analytics, filtering, bulk actions, and housekeeping tools Chat Shortcuts a read-only browser for all Zendesk Chat shortcuts with search, tagging, and export Why this is usefulZendesk doesn't have a built-in view that shows you macro usage data alongside filtering, duplicate detection, and bulk management in one place. If you manage a large macro library, it can be hard to know which macros are stale, which ones overlap, or which groups are using what. This app surfaces all of that in a single dashboard.For Chat shortcuts, the native Zendesk Chat interface doesn't let you search, sort by word count, export to CSV, or generate tag slugs for tracking purposes. This tab fills that gap.What the Macros tab doe
Hello Team We are Planning to Migrate Jira data from Data Center to Cloud Instance. As a part of migration we need to migrate Zendesk data present in Data Center to Cloud Site. Please Help us providing required documents/Steps to Prepare Zendesk for Migration activity and actions need to be performed post of migration Thanks & Regards Srikanth Gowda
Already have an account? Login
No account yet? Create an account
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.