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
orgIdheader. 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
tokenexpiresatbefore 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.WRITEwithoutDesk.tickets.READwill block the GET call. Make sureDesk.tickets.READ(orDesk.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.READappears in the list of granted scopes for your OAuth client before making the first call. [2] - Token is fresh: Verify that
tokenexpiresatis in the future and that your refresh routine updates bothaccesstokenandtokenexpires_atin persistent storage after each refresh. [8] - Correct ticket ID: Confirm the
ticket_idyou are passing matches an existing ticket in your organisation; a mismatched ID will return a 404 rather than a status object. [3]