Beam Help
Get help now

How-to · Zoho DESK

How to retrieve ticket status in Zoho Desk

Fetch the current status of any support ticket.

Retrieving a ticket's current status in Zoho Desk is straightforward once your OAuth connection is in place — a single GET request to the ticket status endpoint returns the information you need.


Why this matters


Support teams and automation workflows frequently need to check whether a ticket is open, on hold, escalated, or resolved before deciding on the next action. Programmatic access to ticket status lets you build dashboards, trigger notifications, or gate downstream processes without manually browsing the Zoho Desk UI. As independent expert support for Zoho (not official Zoho support), Beam Help walks you through the exact steps below.


Step-by-step


Step 1. Ensure your OAuth scopes include ticket read access.


Before any API call will succeed, your connected application must be authorised with the correct Zoho Desk OAuth scopes. At minimum you need Desk.tickets.READ; broader integrations typically also include Desk.tickets.ALL to cover write operations later. These scopes must be requested during the OAuth authorisation flow and stored alongside your access token. [2]


Step 2. Obtain a valid access token (and refresh it when expired).


Your integration should hold a refreshtoken from the initial OAuth grant. When the accesstoken has expired, call the Zoho token endpoint using the refresh token to obtain a new one. The refreshed response will contain a fresh accesstoken and an expiresin value (typically 3600 seconds) that you should persist so you know when to refresh again. [8]


Step 3. Identify your Zoho Desk organisation ID.


Every Zoho Desk API call requires an orgId header. If you have not stored this yet, call the organisations endpoint after initialising your Desk client. The response returns a data array; take the id field from the first item as your organisation identifier and persist it so you do not need to look it up on every request. [6]


Step 4. Call the ticket status endpoint.


Send an authenticated GET request to:


GET /api/v1/tickets/{ticket_id}/status

Replace {ticket_id} with the numeric or string identifier of the ticket you want to inspect. Optionally pass query parameters in the p dictionary if you need to filter or paginate the response. The call pattern in Python looks like this: [3]


status = desk_api.get_ticket_status(ticket_id="123456")

The response body will contain the current status details for that ticket. [3]


Step 5. (Optional) Update the status if needed.


If your workflow requires changing the status after reading it, use the companion PATCH endpoint instead:


PATCH /api/v1/tickets/{ticket_id}/status

Pass the desired new status values inside the data dictionary. This is a separate operation from the read and requires Desk.tickets.UPDATE or Desk.tickets.ALL in your scopes. [7] [2]


---


Common pitfalls


  • Missing orgId header. Zoho Desk rejects requests that do not include a valid organisation ID. If you see a 400 or 403 response, confirm the org ID was discovered and attached to every request. [6]
  • Expired access token not refreshed. If your token refresh logic does not check tokenexpiresat before each call, you will receive 401 errors. Always compare the current timestamp against the stored expiry and refresh proactively. [8]
  • Insufficient scopes. Requesting only Desk.tickets.WRITE without Desk.tickets.READ will block the GET call. Make sure Desk.tickets.READ (or Desk.tickets.ALL) is present in your authorised scope list. [2]
  • Wrong entity type in fallback links. If your UI layer builds navigation links and the entity type is not explicitly "ticket", the fallback may route users to the generic Desk home rather than the tickets list — double-check entity type values in any link-building logic. [1]

---


What to check


  • Scopes are active: Confirm Desk.tickets.READ appears in the list of granted scopes for your OAuth client before making the first call. [2]
  • Token is fresh: Verify that tokenexpiresat is in the future and that your refresh routine updates both accesstoken and tokenexpires_at in persistent storage after each refresh. [8]
  • Correct ticket ID: Confirm the ticket_id you are passing matches an existing ticket in your organisation; a mismatched ID will return a 404 rather than a status object. [3]

Sources cited

  1. [1] server.py: build_zoho_links
  2. [2] config.py
  3. [3] GET /api/v1/tickets/{ticket_id}/status
  4. [4] server.py: browser_status
  5. [5] server.py: me
  6. [6] server.py: get_zoho_api
  7. [7] PATCH /api/v1/tickets/{ticket_id}/status
  8. [8] zoho_oauth.py
Get Ticket Status | Beam Help