Ask questions, share tips, and discuss best practices about apps and integrations, App builder, APIs, SDKs, ZAF, and Sunshine
Recently active
I am struggling to find a way how I could upload attachments to a ticket securely with my app.I can't upload an attachment with ZAFClient.Request() because it does not support the header Content-Type to be set as "application/binary", and therefore corrupts the uploads.So, my only option is to use for example the javascript function fetch to call Zendesk api where I can set the required headers. But because this is not the ZAF client, I need to add a header for authorization.There is no function to get an authorization header from the ZAFClient, and using Secure settings will not work because the code block where I need to set the authorization header is not in a ZAFClient.Request().My only option is to set the authorization header as plain text in the code itself. This is extremely bad and makes me nervous. Is there something obvious that I am missing, or is this really the only way to make this work?Here is my current working (but insecure) way of doing this:  
I’m trying to call the following API as per the documentation:POST /api/v2/tickets/{ticket_id}/satisfaction_ratingI’m using the Admin OAuth token that we obtain during integration (which works fine for creating tickets, adding comments, updating fields, etc). However, this token doesn’t seem to have the necessary permissions for this particular endpoint, and I’m receiving authorization errors.Is there a supported way to impersonate the requester (end-user) in order to submit satisfaction ratings via API? If so, could you please advise on the correct approach or required scopes?Note: same auth works for getting satisfaction ratings Error thrown by api:
Bonjour,je souhaite développer une application pour mes agents permettant de visionner les PDF en pièce jointe de mes tickets dans la partie Support. Pour cela j'utilise l'API Zendesk pour récupérer les commentaires, je parcours les commentaires publiques pour vérifier qu'il y a une pièce jointe, si c'est un PDF alors je stocke l'url. Pour finir j'utilise PDF.JS pour pour afficher ce PDF. J'ai essayé en passant le content url, l'url, en utilisant un Blob intermédiaire en binaire, en texte. Je rencontre toujours l'erreur de CORS policy qui empêche la redirection de zdusercontent.com depuis mon subdomain.zendesk.com. Je ne peux pas utiliser de serveur proxy pour faire le middleware et ajouter le header obligatoire imposer par le client à cause de la confidentialité des données. Est-ce que quelqu'un possède une solution à ce genre de problème ? Est-ce que des évolutions dans Zendesk sont dans la roadmap pour permettre ce genre de fonctionnalité dans le ZAF C
Hi!I am looking for a way to retrieve either Department status (Online/offline) or Department Operating hours via REST API. The problem is that Real Time Chat API agents/agents_online will retrieve that agents are online in a specific department even if the department is offline by the Operating hours schedule. Chat API /departments endpoint do not seem to contain these settings. Is there any way to: Retrieve current status of a department (Online/offline taking in consideration all factors that can affect it) or Access department Operating hours as set up in Chat --> Account --> Operating hours via REST API?
Hi Zendesk Teams, We have noticed that Zendesk has recently enabled support for the OAuth 2.0 refresh_token mechanism,and we have implemented a fallback mechanism to handle expired access tokens and expired refresh tokens so we’ve been testing the implementation using Postman. Below is the response we received.Postman Request: Followed this step: https://learning.postman.com/docs/sending-requests/authorization/oauth-20/#using-oauth-20Response: We have a few questions: In the documentation, the property is listed as expires_in, but in the actual response, we see expires_at. Could you clarify the reason for this difference? We observed that the expires_at field is returning null. Is this expected behavior, or is something missing in our request? What scopes are required for refresh token support? Currently, we’ve included read and write. Do we also need to add offline_access or any other scopes as part of enabling token refresh? Is Zendesk using the standard OAuth 2.0 flo
Is there a way for a private side-bar app to detect if the current agent UI is in light or dark mode?Can we use Client.get to detect if the current agent is in dark or light mode?Also, is there a way for the app to detect when the display changes from dark to light mode, such as through an event?
Hi, I have created a trial account and I'm trying to test the bot feature, but when I click on Channels left menu I cannot see the Bot section. Do I have to activate something? Regards.
Hey, After last Zendesk update on 30th of May our ticket-editor app started to get “max-height=320px” imposed on it. At first it was =360px, and it is hiding the button like on the screenshot. When I started modifying the resolution of the app window, it started to impose 320px instead. I looked through the ZAF/Zendesk dev documentation and all I found is that there is a max-width imposed on some other Zendesk apps (not ticket-editor apps). And it is even more concerning that it started to impose even more agressive 320px instead of 360px. This didn't happen before 30th May update. As you can see, the app doesn't have a scroll bar to scroll down to the button either, even though it is set to be like that in the .css settings. I looked through the 30th May release notes and found nothing on this. What am I missing? Why the max-height suddenly appears there? We don't have this settting in the app, so it must be imposed from the top down.
We write some of our articles in HTML using <button> elements to show/hide certain content. Some of these articles are written manually and some are uploaded via API. Around 1 month ago - end April 2025 all button elements were deleted from our articles and on adding new test <button> element to an article it is immediately deleted.This makes much of the content on our articles inaccessible.Appreciate if anyone could shed some light on why this might be happening and how to avoid
Good Morning, i have a question about Via channel in Api. I try to change the via channel in a ticket by Api methods, but a can't do it. Do you now some code about this? or information related, i read the documentation oficial of Zendesk, but i don't found it. Thank's! Atte.Lorenzo.Rodriguez
I have a webhook that is subscribed to all message activity. When an end user starts a conversation, I get a post to my webhook at the beginning, and at every subsequent message they type. That all works fine. I want to write a python script that posts back into the conversation after looking up some stuff in my database, doing some calculations, and discovering the answer that the end user needs.So far, the script extracts the ticket ID from the webhook, and then looks up the conversation ID. That part works. Then when I try to use the postMessage API to put a message back into the conversation, I get a message like this back: {"errors":[{"code":"bad_request","title":"should have required property 'content'"}]} Here is the JSON that contains the content property, just like in the docs example:$ curl https://api.smooch.io/v2/apps/$ZD_APP_ID/conversations/$CONVERSATION_ID/messages \ --user $ZD_KEY:$ZD_SECRET \ -d '{"author": {"type": "business"}, "content": {
I am using the `api/v2/deleted_tickets` endpoint, and using cursor-based pagination. I have noticed that the endpoint does not respect any type of sorting. I've tried providing `sort_by`, `sort_order`, and even `sort` query parameters, and the endpoint always returns the results in the same order. With offset-based pagination, the sort is respected. Can someone help with this?
Hi Team, We are planning to build a data connector for Zendesk Workforce Management, but we need the official API documentation, including complete authentication details. Could you please help us with this?Thanks,Vinod
Hello Zendesk Support Team,We are currently developing a live chat integration using Zendesk. During implementation, we discovered that the system only synchronizes the last 10 historical messages to the Zendesk ticket through pass control. Unfortunately, this is insufficient for our needs — we would like to synchronize historical messages based on a specific time or date range.We’ve found a workaround: after a new ticket is created by a client, we can search for that ticket and insert the desired historical messages as plain text. However, this process is&nb
I want to know if there is a way where we can use the Zendesk API to extract the entire ticket data including the conversation and then Analyze ticket conversations to extract: What went well What’s pending Ideal timeline Next steps Client confidence level And then Generate a summary report in Excel with all key insights, ready for team review.
I'm not finding how to have a Welcome email sent to a new user when that user is created via a REST call to the API. It seems that it should be possible, according to this blurb Note: Before you begin creating users through the API, make sure to configure your account settings in Zendesk Support to get the results you want. For example, do you want to send welcome emails automatically to the new users? from here. Any guidance? Thanks in advance!
Hi Devs, I'm trying to add Zendesk Trigger node on n8n platform and I'm using OAuth2 method, I have created a OAuth client under Apps and integration> APIs>Zendesk API>OAuth Clients. Entered Unique identifier, Client kind=Public, Redirect URLs (Got from n8n node), and secret key was generated. When I use these creds under Zendesk Node on n8n while adding OAuth2 creds I get error saying Invalid Authorization Requestinvalid_request The request is missing a required parameter, includes an unsupported parameter or parameter value, or is otherwise malformed.What am I missing here?
Hi Zendesk Developer Community,We're developing a Zendesk App Framework (ZAF) v2 application that allows agents to send an email-type side conversation from a ticket, including attachments that already exist on that ticket.Our Workflow: Fetch Ticket Attachments: Our ZAF app (running in the ticket sidebar) successfully fetches all comments for the current ticket using client.request({ url: \/api/v2/tickets/${ticketId}/comments.json` })`. Extract Attachment Details: We parse the attachments array from each comment, collecting unique attachment objects (which include id, file_name, content_url, etc.). User Selection: The app UI displays these attachments (filename and size) with checkboxes, allowing the agent to select which ones to include in the side conversation. Construct Payload: When the agent submits: We gather the numeric id of each selected attachment. We construct the payload for the POST /api/v2/tickets/{ticket_id}/side_conversations endpoint. Based on API error feedback, w
Hi team,In my user sidebar app, I'm trying to add handlers for events such as an update of the ticket requester.My app duplicates some of the default user sidebar fields such as Phone and Locale.I noticed that if I switch to the user sidebar, change the user's locale, then switch back to my app and try to update the requester (with a test button), I receive an outdated requester json where the locale is the one that requester had before the change.// We've changed the ticket requester's locale from English to Spanish // and clicked the button to get refreshed user data: const testButton = document.getElementById('test-button'); testButton.addEventListener('click', async () => { const freshRequesterId = (await client.get('ticket.requester.id'))['ticket.requester.id']; const refreshedRequester = await client.request(`/api/v2/users/${freshRequesterId}.json`); console.log('refreshedRequester: ', refreshedRequester); // refreshedRequester json shows user locale is still Engli
I'm using zE( "messenger", "loginUser",…) to authenticate users, and I get a null back from loginCallback, so the user should be authenticated. But when the user opens Live Chat, the user is asked for email address and name. For ‘Creating email identities’ I've selected ‘Use both verified and unverified emails’. Why does the user have to enter email address + name?
I was wondering if anyone has set up a PIN validation system for Talk. I understand the IVR feature doesn't natively support this. But what I basically would need is: VIP customers are given a unique PIN code to be able to get in touch with our phone support team The VIP customers would call one Talk phone line and the IVR system would ask them to enter their PIN Zendesk would make an API call to check the PIN code against a list (Could it be from a Google Sheet?) If the pin doesn't match, it gives a standard "Sorry, your pin number is not recognized, reach out to us via support@support.com) If the pin does match, then the call is routed to a specific Zendesk group ID according to the info on that list. I can't tell if one of the variables here would be useful for this: https://developer.zendesk.com/api-reference/voice/talk-api/ivrs/ Has anyone else set up something like this? Any tips would be appreciated!
I’ve enabled the Follow-ups feature in Zendesk, which is supposed to copy the original assignee and group to follow-up tickets. It sets the follow-up ticket's assignee and group (if not already set) to the original ticket's assignee and group.However, I’ve noticed an issue: when agents are out of office, the follow-up tickets are not being reassigned automatically. Has anyone else encountered this?After reviewing the documentation, I saw a note that this feature may not work properly if the Zendesk OOO app is installed and the Force Unassign Tickets checkbox is enabled.My questions: If I uncheck the Force Unassign Tickets option, will it cause any issues elsewhere? Do I also need to uncheck the Prevent Assignment option for follow-ups to work correctly? Any guidance or tips would be greatly appreciated!
I making an API calls inside the SDK application with the Axios POST method and Formdata, you can in the below code. const axios = require('axios');const FormData = require('form-data');let data = new FormData();data.append('username', 'balu');data.append('key', jhjjjjhjjjhh');data.append('email', 'anish.k@spritle.com');let config = { method: 'post', maxBodyLength: Infinity, url: 'https://opencart.ajithr.com/index.php?route=zendesk/customer', headers: { 'Content-Type': 'application/json', 'Cookie': 'OCSESSID=0c4898f4cd2a443a21c3fb3324; currency=USD', ...data.getHeaders() }, data : data};axios.request(config).then((response) => { console.log(JSON.stringify(response.data));}).catch((error) => { console.log(error);}); How can I change this Axios method into a client method? I documentation also can't able to find it.Thanks in advance.
How can I set organization and user fields using metadata from users logged into our app within the Zendesk Web Widget and SDKs?I want the customers name, email, phone number, and any other metadata we have to be passed to the proper fields. Not custom fields on the conversation. The developer documents only show conversation fields: https://developer.zendesk.com/documentation/zendesk-web-widget-sdks/sdks/ios/advanced_integration/#conversation-fields
Placeholders in Zendesk (also known as merge tags) are used to automatically insert dynamic content into your messages, such as the requester’s name, ticket ID, or email address. They help personalize communication at scale and are especially useful for bulk email campaigns.However, even a small mistake like a typo (e.g. {{user.first_nam}}), an incorrect field, or a missing bracket can cause the placeholder to break. This results in emails that look unprofessional or confusing to the customer.To help prevent these issues, we’ve added placeholder validation to the Proactive Campaigns app for Zendesk.When composing an email for your campaign, placeholders are now checked automatically: Valid placeholders are highlighted in blue Invalid placeholders are highlighted in red, accompanied by a tooltip that explains the issue This update is designed to reduce manual errors, eliminate the need for repeated test sends, and ensure your communications maintain a professional standard.
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.