Listing tickets associated with a specific account in Zoho Desk is straightforward once you have the correct account ID and the right API scopes in place. This guide walks through the exact endpoint and configuration steps our team uses.
Why this matters
When managing enterprise support, you often need to see every open or historical ticket tied to a single company rather than an individual contact. Pulling tickets by account gives support managers a consolidated view of a customer organisation's entire support history, making escalation decisions and SLA reviews much faster.
Step-by-step
Step 1. Confirm your OAuth scopes include Desk ticket and account access.
Before making any API call, verify that your connected Zoho Desk OAuth token was granted at minimum Desk.tickets.READ and Desk.contacts.READ scopes. Without these, the request will be rejected at the authorisation layer. Our team recommends also including Desk.tickets.ALL so that write operations are available if needed later. [2]
Step 2. Identify the account ID you want to query.
Navigate to your Zoho Desk portal and open the Accounts section. Open the specific account record and copy the numeric ID from the URL or the record detail panel. This is the account_id value you will pass into the endpoint. If you are working programmatically, you can also retrieve it by browsing to the accounts list at the /accounts path in your portal. [1]
Step 3. Call the list-tickets-by-account endpoint.
Send a GET request to the following path, substituting your real account ID:
GET /api/v1/accounts/{account_id}/tickets
The operation is named listticketsby_account. It accepts two parameters:
account_id— the numeric ID of the account (required, part of the URL path)p— an optional dictionary of additional query parameters such as pagination or filters
A minimal Python call looks like this:
def list_tickets_by_account(self, account_id: str, p: dict = None):
return self.c.request("GET", f"/api/v1/accounts/{account_id}/tickets", p, None)
Step 4. Ensure your Desk client has a valid orgId set.
Zoho Desk requires an organisation ID (orgId) on every API request. If your integration has not yet stored this value, the client can auto-discover it by calling the organisations endpoint on first use. The discovered ID is then persisted so subsequent calls — including listticketsby_account — carry the correct header automatically. [5][8]
Step 5. Parse and display the returned ticket list.
The response will be a JSON object containing ticket records for that account. Key fields to surface to end users include ticket subject, status, assigned agent, and creation date. Skip internal ID fields in any user-facing display to keep the output readable. [6]
Step 6. Build a direct portal link for each ticket (optional).
If you want to give agents a clickable link to each ticket, construct the URL using the pattern:
https://desk.zoho.{dc}/agent/{portal}/tickets/details/{TicketId}
Replace {dc} with your data centre suffix (e.g., com, eu), {portal} with your portal name or org ID, and {TicketId} with the ID from the API response. [4]
---
Common pitfalls
- Missing
orgIdheader. If the Desk client is initialised without an organisation ID, all requests — including account ticket lookups — will fail. Make sure the auto-discovery flow has run at least once and the ID has been persisted. [5][8] - Insufficient scopes. Requesting tickets requires
Desk.tickets.READat a minimum. If your token was issued with onlyDesk.basic.READ, the endpoint will return an authorisation error. Re-authorise with the full scope set. [2] - Wrong data centre. The base URL must match the data centre where your Zoho Desk portal is hosted. Using
desk.zoho.comfor an EU-hosted portal will fail; usedesk.zoho.euinstead. [4]
---
What to check
- Confirm the
account_idin your request matches an existing account in Zoho Desk — a mismatched ID will return an empty result or a 404 rather than an error that makes the problem obvious. - Verify the OAuth token in use carries both
Desk.tickets.READandDesk.contacts.READscopes before going to production. [2] - After the first successful call, check that the
deskorgidhas been stored in your connection record so future requests do not need to re-discover it. [8]
---
*Beam Help is an independent expert support resource for Zoho products and is not official Zoho support. For platform-level issues, always raise a ticket with Zoho directly.*