Beam Help
Get help now

How-to · Zoho DESK

How to list tickets by contact in Zoho Desk

Retrieve all tickets associated with a specific contact.

Listing all support tickets associated with a specific contact in Zoho Desk is straightforward once you have the contact's ID — a single API call returns the full ticket list for that person.


Why this matters


When a customer contacts your support team repeatedly, you need a consolidated view of every ticket they have ever raised. This is essential for understanding a contact's history before responding, for escalation reviews, and for reporting on high-volume contacts. Without this lookup, agents must manually search or filter, which is slow and error-prone.


Step-by-step


Step 1. Identify the contact_id for the person whose tickets you want to retrieve. You can find this by navigating to Contacts inside your Zoho Desk portal (the URL pattern follows desk.zoho.com/agent/{portal}/contacts) or by querying the contacts endpoint first. The ID is the unique numeric identifier shown in the contact record URL. [1]


Step 2. Confirm your OAuth token includes the correct Zoho Desk scopes. At a minimum you need Desk.tickets.READ and Desk.contacts.READ to both resolve the contact and read their tickets. If you are using a broader integration, scopes such as Desk.tickets.ALL will also cover this operation. [5]


Step 3. Make a GET request to the following Zoho Desk API endpoint, substituting the real contact identifier into the path: [2]


GET /api/v1/contacts/{contact_id}/tickets

The operation is identified internally as listticketsbycontact. The path parameter contactid is required; the optional query parameter p can be used to control pagination. [2]


Step 4. In Python, the call looks like this: [2]


def list_tickets_by_contact(self, contact_id: str, p: dict = None):
    return self.c.request("GET", f"/api/v1/contacts/{contact_id}/tickets", p, None)

Pass the contact's ID as a string. If you need a specific page of results, supply a pagination dictionary as the second argument; otherwise leave it as None. [2]


Step 5. Parse the response. The Zoho Desk API returns ticket records containing key fields such as subject, status, assigned agent, and department. Our team recommends displaying at minimum: ticket subject, current status, and the owning agent so the caller gets an immediately actionable summary. [6]


Step 6. If you want a direct browser link to any ticket returned in the response, the URL pattern to construct is: [3]


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, and {TicketId} with the ID from the API response. [3]


---


*Beam Help is an independent expert support resource — not official Zoho support.*


Common pitfalls


  • Missing or wrong orgId: Zoho Desk requires the organisation ID to be sent with every API request. If it is absent, the system will attempt to auto-discover it by calling the organisations endpoint first, then persist the value for future calls. If you see authentication or "org not found" errors, verify that deskorgid is correctly stored and passed to the client. [7] [8]
  • Insufficient OAuth scopes: Requesting tickets under a contact requires both contact-read and ticket-read permissions. If your token was issued without Desk.contacts.READ or Desk.tickets.READ, the API will return a permission error. Re-authorise with the full scope set. [5]
  • Pagination not handled: The p parameter controls which page of results is returned. If a contact has many tickets and you omit pagination handling, you will only see the first page. Loop through pages until the response returns fewer records than the page size. [2]
  • Wrong data centre: The base URL must match the data centre where your Desk account is hosted. Using desk.zoho.com for an EU-hosted account will fail; use desk.zoho.eu instead. [3]

What to check


  • Verify that the contact_id you are passing actually exists in Zoho Desk by opening the contact record in the agent portal before making the API call. [1]
  • Confirm your active OAuth token carries at least Desk.tickets.READ and Desk.contacts.READ in its scope list. [5]
  • Check that the orgId (organisation ID) is correctly configured in your API client, especially if this is the first call after a fresh OAuth authorisation. [7] [8]

Sources cited

  1. [1] server.py: build_zoho_links
  2. [2] GET /api/v1/contacts/{contact_id}/tickets
  3. [3] server.py: chat_stream
  4. [4] config.py
  5. [5] planner.py
  6. [6] server.py: get_zoho_api
List Tickets by Contact | Beam Help — Beam Help