Listing events associated with a specific ticket in Zoho Desk is done through a single GET request that targets the ticket's unique ID. Here at Beam Help — independent expert support for Zoho (not official Zoho support) — we walk you through exactly how to set this up.
Why this matters
When managing support workflows, you often need to review all scheduled or logged events tied to a particular ticket — such as follow-up calls or meetings. Fetching these programmatically lets you build dashboards, automate reminders, or audit activity without manually browsing the Zoho Desk agent interface. This is especially useful when integrating Desk data into external reporting tools or custom portals.
Step-by-step
Step 1. Confirm your OAuth token includes the correct Desk events scope before making any API call. The required scope for reading events is Desk.events.READ, and for full access (create, update, delete) you will need Desk.events.ALL. Both of these must be present in your authorised token. [2]
Step 2. Identify the ticketId for the ticket whose events you want to retrieve. This is the unique numeric or alphanumeric identifier assigned by Zoho Desk to each ticket record. You can obtain it from the ticket URL in the agent portal or from a prior API call that returned ticket data. [3]
Step 3. Send a GET request to the following endpoint, substituting your actual ticket identifier into the path:
GET /api/v1/tickets/{ticketId}/events
This operation is named listeventsby_ticket in the Zoho Desk API. The path parameter ticketId is required; the query parameter p is optional and can be used to pass additional pagination or filter options. [3]
Step 4. In code, the call looks like this (shown in Python):
def list_events_by_ticket(self, ticketId: str, p: dict = None):
return self.c.request("GET", f"/api/v1/tickets/{ticketId}/events", p, None)
Pass the ticket ID as a string, and optionally supply a dictionary of query parameters as p if you need to filter or paginate results. [3]
Step 5. Parse the response. The returned payload will contain an events key under a data wrapper. Iterate over the list to access individual event objects and their properties. [7]
Step 6. If you are building a UI link to navigate directly to the ticket in the Zoho Desk agent portal, the URL pattern follows this structure:
https://desk.zoho.{dc}/agent/{portal}/tickets/details/{TicketId}
Replace {dc} with your data centre suffix (e.g., com, eu, in), {portal} with your Desk portal name or org ID, and {TicketId} with the relevant ticket identifier. [5]
Common pitfalls
- Missing or incorrect OAuth scope. If your token was generated without
Desk.events.READorDesk.events.ALL, the API will return an authorisation error. Always verify the full scope list in your OAuth configuration before testing. [2]
- Wrong or missing
orgId. Zoho Desk API calls require the correct organisation ID to be resolved and attached to the request context. If thedeskorgidis not set in your connection record, the system may fail to route the request to the right organisation. Ensure your connection has a validdeskorgidstored and that it is passed through to the API client. [4]
- Confusing events with tasks. Zoho Desk exposes a separate endpoint for tasks tied to a ticket —
GET /api/v1/tickets/{ticketid}/tasks— which is a different operation (listtasksbyticket). Make sure you are calling the/eventspath and not the/taskspath if events are what you need. [8]
- Empty
eventsarray. If no events have been logged against the ticket, the response will return an empty list rather than an error. Build your code to handle this gracefully rather than treating an empty result as a failure. [7]
What to check
- Verify that your OAuth token includes at minimum
Desk.events.READand that it has not expired before making the call. [2] - Confirm the
ticketIdyou are passing actually exists in your Desk organisation and belongs to the correctorgIdconfigured in your connection. [4] - Check that your response-parsing logic handles both a populated
eventslist and an empty one without throwing errors. [7]