Beam Help
Get help now

How-to · Zoho DESK

How to delete a ticket time entry in Zoho Desk

Remove time entries from tickets via API with ticket and entry IDs.

Deleting a ticket time entry in Zoho Desk is done via a single authenticated DELETE request to the time entries endpoint, passing both the ticket ID and the time entry ID as path parameters.


Why this matters


Time entries logged against support tickets drive billing, SLA reporting, and agent productivity metrics. If an entry was logged in error — wrong ticket, duplicate submission, or incorrect duration — you need a clean way to remove it without affecting other records. This is also relevant when automating time-tracking cleanup through scripts or integrations.


> Note: Beam Help is independent expert support for Zoho — not official Zoho support.


---


Step-by-step


Step 1. Confirm your OAuth scopes.

Before making any API call, verify that your connected app's token includes the Desk.tickets.ALL or Desk.tickets.DELETE scope. Without the correct scope the request will be rejected with an authorisation error. [2]


Step 2. Identify the two required IDs.

You need exactly two values:

  • ticketId — the unique identifier of the ticket the time entry belongs to.
  • timeEntryId — the unique identifier of the specific time entry you want to remove.

Both are strings. You can retrieve them from a prior GET call to the ticket's time entries list, or from the Zoho Desk UI URL. [1]


Step 3. Construct the DELETE request.

Send an HTTP DELETE to the following endpoint, substituting your real IDs:


DELETE /api/v1/tickets/{ticketId}/timeEntries/{timeEntryId}

Include your Authorization: Bearer <access_token> header and the appropriate orgId header required by Zoho Desk's API. [1]


Step 4. Execute the call in Python (optional).

If you are working with a Python integration, the call follows this pattern:


def delete_ticket_time_entry(self, ticketId: str, timeEntryId: str, p: dict = None):
    return self.c.request(
        "DELETE",
        f"/api/v1/tickets/{ticketId}/timeEntries/{timeEntryId}",
        p,
        None
    )

Pass the ticketId and timeEntryId as positional arguments; the optional p parameter can carry any additional query parameters your environment requires. [1]


Step 5. Handle the response.

A successful deletion returns an HTTP 204 No Content or a similar success status with an empty body. If you receive a 4xx response, revisit your IDs and OAuth scopes before retrying. [1]


---


Common pitfalls


  • Wrong entity type. Time entries can also be attached to contacts (/api/v1/contacts/{contactId}/timeEntries/{timeEntryId}) or accounts (/api/v1/accounts/{accountId}/timeEntries/{timeEntryId}). Make sure you are targeting the ticket endpoint and not one of these sibling endpoints, or you will get a "not found" error even if the entry exists. [4][8]
  • Insufficient OAuth scope. The Desk.tickets.READ scope alone is not enough — you must have a scope that permits deletion, such as Desk.tickets.DELETE or Desk.tickets.ALL. [2]
  • Swapped IDs. Placing the timeEntryId in the ticketId position (or vice versa) will result in a resource-not-found error. Double-check the order: ticket ID comes first in the path, time entry ID second. [1]

---


What to check


  • Scope coverage: Confirm your OAuth token was issued with Desk.tickets.DELETE or Desk.tickets.ALL before making the call. [2]
  • Correct endpoint path: Verify the URL reads /api/v1/tickets/{ticketId}/timeEntries/{timeEntryId} — not the contacts or accounts variant. [1][4][8]
  • Successful response code: A 204 (or equivalent success status) confirms removal; anything in the 4xx range means the entry was not deleted and requires investigation. [1]

Sources cited

  1. [1] DELETE /api/v1/tickets/{ticketId}/timeEntries/{timeEntryId}
  2. [2] config.py
  3. [3] server.py: build_zoho_links
  4. [4] DELETE /api/v1/contacts/{contactId}/timeEntries/{timeEntryId}
  5. [5] DELETE /api/v1/tickets/{ticketId}/tags/{tagId}
  6. [6] DELETE /api/v1/ticketTemplates/{templateId}
  7. [7] zoho_oauth.py
  8. [8] DELETE /api/v1/accounts/{accountId}/timeEntries/{timeEntryId}
Delete Ticket Time Entry | Beam Help