Beam Help
Get help now

How-to · Zoho DESK

How to list conversations in Zoho Desk tickets

Retrieve all conversations and messages within a support ticket.

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.READ or contact-level scopes, the conversations endpoint will return an authorisation error. Double-check that Desk.tickets.READ (or Desk.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_id will 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 p parameter 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.READ or Desk.tickets.ALL by inspecting the granted scopes in your Zoho API console. [2]
  • Correct endpoint path: Confirm the request URL resolves to /api/v1/tickets/{ticketid}/conversations with a valid, numeric ticketid substituted in. [8]
  • Full pagination: If the response includes a nextPage indicator or a total count higher than the default page size, ensure your integration loops through all pages before processing results. [8]

Sources cited

  1. [1] server.py: build_zoho_links
  2. [2] config.py
  3. [3] index.html
  4. [4] server.py: chat
  5. [5] planner.py
  6. [6] server.py: chat_stream
  7. [7] GET /api/v1/tickets/{ticket_id}/conversations
List Conversations in Tickets | Beam Help — Beam Help