Listing all conversations on a Zoho Desk ticket is straightforward once you know the correct API endpoint and the required OAuth scopes. This article walks you through the exact call and what to verify afterwards.
Why this matters
Support workflows often require programmatic access to the full thread of replies, notes, and forwards attached to a ticket — for reporting, automation, or integration with other tools. Knowing how to retrieve that conversation list via the Zoho Desk API lets you build reliable pipelines without manually exporting data from the UI. As independent expert support (not official Zoho support), Beam Help documents this pattern so your team can implement it confidently.
Step-by-step
Step 1. Confirm your OAuth token includes the correct Desk scopes before making any API call. At minimum you need Desk.tickets.READ in your scope list; broader integrations typically also include Desk.tickets.ALL to cover read, write, create, update, and delete operations in a single grant. [2]
Step 2. Identify the ticket_id of the ticket whose conversations you want to retrieve. This is the internal Zoho Desk numeric identifier for the ticket record — not the display ticket number shown to customers. You can obtain it from a prior ticket lookup or from the ticket detail URL in the Desk agent portal. [7]
Step 3. Send a GET request to the conversations endpoint, substituting your ticket's ID into the path:
GET /api/v1/tickets/{ticket_id}/conversations
Include your OAuth bearer token in the Authorization header as usual. The optional p parameter can be passed as a query-string dictionary to control pagination or filtering of the returned conversation list. [8]
Step 4. Parse the response. The endpoint returns the list of conversation entries associated with that ticket — replies, public comments, private notes, and forwarded messages are all surfaced through this single call. Iterate over the returned array to access individual message bodies, timestamps, author details, and channel information. [8]
Step 5. If you are building a UI or assistant on top of this data, map each conversation entry back to the ticket's agent portal URL so agents can jump directly to the record. The Desk deep-link pattern follows the format https://desk.zoho.{dc}/agent/{portal}/tickets/details/{ticket_id}, where dc is your data-centre suffix (e.g. com, eu, in) and portal is your Desk portal name. [7]
Common pitfalls
- Missing or insufficient scopes. If your OAuth client was granted only
Desk.search.READor contact-level scopes, the conversations endpoint will return an authorisation error. Double-check thatDesk.tickets.READ(orDesk.tickets.ALL) is present in the token's scope string. [2]
- Wrong ticket ID format. Passing the customer-facing ticket number instead of the internal
ticket_idwill result in a 404 or empty response. Always resolve the internal ID first via a ticket search or lookup call before calling the conversations endpoint. [8]
- Data-centre mismatch. Zoho Desk is hosted across multiple regional data centres. Ensure the base URL you use (
desk.zoho.com,desk.zoho.eu, etc.) matches the region where your organisation's Desk account is provisioned; requests routed to the wrong region will fail authentication. [7]
- Pagination not handled. For tickets with long conversation histories, the API returns results in pages. Use the
pparameter to step through pages and avoid silently truncating the conversation list. [8]
What to check
- Scope coverage: Verify your active OAuth token contains
Desk.tickets.READorDesk.tickets.ALLby inspecting the granted scopes in your Zoho API console. [2] - Correct endpoint path: Confirm the request URL resolves to
/api/v1/tickets/{ticketid}/conversationswith a valid, numericticketidsubstituted in. [8] - Full pagination: If the response includes a
nextPageindicator or a total count higher than the default page size, ensure your integration loops through all pages before processing results. [8]