Beam Help
Get help now

How-to · Zoho DESK

How to list ticket activities in Zoho Desk

Retrieve all activities and events logged on a ticket.

Listing ticket activities in Zoho Desk is straightforward once you have the correct endpoint and the right OAuth scopes in place — a single GET request against the activities sub-resource returns the full activity log for any ticket.


Why this matters


Every support ticket accumulates a trail of status changes, agent assignments, and other system events. Retrieving that trail programmatically lets you audit ticket history, build custom dashboards, or feed activity data into downstream workflows. If you are integrating Zoho Desk with an external system, this endpoint is the canonical way to pull that information without scraping the UI.


Step-by-step


Step 1. Confirm your OAuth scopes include ticket access.


Before making any API call, verify that your connected application has been granted the Desk.tickets.READ scope (at minimum). A broader grant such as Desk.tickets.ALL also satisfies this requirement. These scopes must be declared when you register your OAuth client and authorise the connection. [2]


Step 2. Resolve your organisation ID.


Zoho Desk's API requires an orgId header on every request. If you have not stored this value yet, call the organisations endpoint to retrieve it. The first organisation returned in the response array can be used as your working orgId, and you should persist it so you do not need to look it up on every call. [8]


Step 3. Identify the target ticket ID.


You need the numeric ticketId of the ticket whose activities you want to list. You can obtain this from a prior ticket search or lookup call, or directly from the Zoho Desk agent interface URL, which follows the pattern https://desk.zoho.{dc}/agent/{portal}/tickets/details/{TicketId}. [3]


Step 4. Call the list-ticket-activities endpoint.


Issue an HTTP GET request to:


GET /api/v1/tickets/{ticketId}/activities

Replace {ticketId} with the actual ticket identifier from Step 3. The request accepts an optional p parameter object for pagination or filtering. Include your access token in the Authorization header and your orgId in the orgId header. [4]


A minimal Python example looks like this:


# Assuming `desk_api` is an initialised ZohoDeskApi instance
activities = desk_api.list_ticket_activities(ticketId="98765", p=None)
print(activities)

The method internally fires GET /api/v1/tickets/98765/activities and returns the parsed response. [4]


Step 5. Handle pagination if needed.


The p parameter accepts pagination arguments. If the ticket has a long history, pass appropriate page or limit values inside that dictionary to walk through all results. [4]


Step 6. (Optional) Cross-reference with tasks.


Activities and tasks are separate resources in Zoho Desk. If you also need task records attached to the ticket, use the distinct endpoint:


GET /api/v1/tickets/{ticket_id}/tasks

This returns task objects rather than the activity log, so keep the two calls separate depending on what your integration requires. [7]


Common pitfalls


  • Missing orgId header. Zoho Desk rejects requests that do not include a valid organisation ID. If your stored orgId is blank, trigger the auto-discovery flow against the organisations endpoint before retrying. [8]
  • Insufficient scopes. Requesting activities with only Desk.basic.READ will result in an authorisation error. Ensure Desk.tickets.READ or Desk.tickets.ALL is present in your scope string. [2]
  • Confusing activities with tasks. The /activities and /tasks sub-resources are not interchangeable. Activities capture system-generated audit events; tasks are user-created action items. Calling the wrong endpoint will return an empty or irrelevant result set. [4][7]
  • Expired access tokens. Zoho access tokens have a limited lifespan. Your integration should implement a token-refresh flow that exchanges the stored refresh token for a new access token whenever a 401 response is received. [8]

What to check


  • Scope list: Confirm Desk.tickets.READ (or Desk.tickets.ALL) appears in the OAuth scope string used during authorisation. [2]
  • Correct ticket ID: Verify the ticketId in your request matches a real ticket in your Zoho Desk organisation — a mismatch will return a 404 or empty activities array. [4]
  • Organisation ID persistence: After the first successful org-discovery call, confirm the orgId is saved so subsequent requests do not incur an extra round-trip. [8]

---


*Beam Help provides independent expert support for Zoho products and is not official Zoho support. Always refer to the Zoho Desk API documentation for the latest endpoint specifications.*

Sources cited

  1. [1] server.py: build_zoho_links
  2. [2] config.py
  3. [3] GET /api/v1/tickets/{ticketId}/activities
  4. [4] server.py: chat_stream
  5. [5] server.py: get_zoho_api
  6. [6] GET /api/v1/tickets/{ticket_id}/tasks
List Ticket Activities | Beam Help — Beam Help