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
orgIdheader. Zoho Desk rejects requests that do not include a valid organisation ID. If your storedorgIdis blank, trigger the auto-discovery flow against the organisations endpoint before retrying. [8] - Insufficient scopes. Requesting activities with only
Desk.basic.READwill result in an authorisation error. EnsureDesk.tickets.READorDesk.tickets.ALLis present in your scope string. [2] - Confusing activities with tasks. The
/activitiesand/taskssub-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
401response is received. [8]
What to check
- Scope list: Confirm
Desk.tickets.READ(orDesk.tickets.ALL) appears in the OAuth scope string used during authorisation. [2] - Correct ticket ID: Verify the
ticketIdin 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
orgIdis 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.*