Beam Help
Get help now

How-to · Zoho DESK

How to delete task time entry in Zoho Desk

Remove a specific time entry logged against a task.

Deleting a task time entry in Zoho Desk via the API requires a single authenticated DELETE request targeting the specific task and time entry identifiers. Here's everything you need to make it work cleanly.


Why this matters


Time entries logged against tasks in Zoho Desk affect billing records, productivity reports, and agent workload summaries. If an entry was logged in error — wrong duration, wrong task, or a duplicate — you need a reliable way to remove it programmatically rather than hunting through the UI. This is especially useful when building automation scripts or integrations that manage time tracking at scale.


Step-by-step


Step 1. Confirm your OAuth scopes include task permissions.


Before making any call, verify that your connected Zoho Desk OAuth token was issued with the Desk.tasks.ALL or at minimum Desk.tasks.DELETE scope. Without this, the API will reject your request with an authorisation error. These scopes must be declared when you first generate your OAuth credentials and cannot be added retroactively without re-authorising. [2]


Step 2. Collect the two required identifiers.


You will need exactly two values:


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

Both IDs are returned when you create or list time entries via the Zoho Desk API. Store them at creation time, or retrieve them with a GET call against the task's time entries endpoint before proceeding. [1]


Step 3. Send the DELETE request.


Issue an HTTP DELETE to the following endpoint, substituting your real values for the path parameters:


DELETE /api/v1/tasks/{taskId}/timeEntries/{timeEntryId}

An example using Python looks like this:


# Assuming `api` is your initialised ZohoDeskApi client
result = api.delete_task_time_entry(
    taskId="your_task_id_here",
    timeEntryId="your_time_entry_id_here"
)
print(result)

The method sends a DELETE request to the constructed path and returns the API response. [1]


Step 4. Handle the response.


A successful deletion will return an HTTP 204 No Content or a confirmation payload depending on your Zoho Desk portal configuration. If the response contains an error key, inspect the message — common causes are an invalid ID, insufficient scope, or the entry already having been deleted. [1]


---


> Note: Beam Help is an independent expert support resource for Zoho products — we are not official Zoho support. For billing or account-level issues, contact Zoho directly.


---


Common pitfalls


  • Wrong endpoint for the record type. Time entries can exist on tasks, contacts, *and* accounts — each has its own dedicated endpoint. If you accidentally call DELETE /api/v1/contacts/{contactId}/timeEntries/{timeEntryId} or DELETE /api/v1/accounts/{accountId}/timeEntries/{timeEntryId} with a task-based time entry ID, the call will fail or silently target the wrong record. Always match the endpoint to the parent object type. [3][6]

  • Expired or missing OAuth token. If your access token has lapsed, the request will be rejected before it reaches the time entry logic. Implement a token-refresh check before making destructive calls — once a deletion goes through, it cannot be undone. [2]

  • Passing taskId and timeEntryId in the wrong order. Both parameters are plain strings and the SDK will not warn you if they are transposed. Double-check the argument order matches (taskId, timeEntryId) as defined in the method signature. [1]

---


What to check


  • Scope confirmation: Verify your active OAuth token includes Desk.tasks.DELETE or Desk.tasks.ALL before running the deletion in production. [2]
  • ID accuracy: Cross-reference both taskId and timeEntryId against a GET response immediately before deletion to ensure you are targeting the correct record. [1]
  • Endpoint match: Confirm the time entry you want to remove is genuinely attached to a *task* — not a contact or account — so you use the correct API path. [3][6]

Sources cited

  1. [1] DELETE /api/v1/tasks/{taskId}/timeEntries/{timeEntryId}
  2. [2] config.py
  3. [3] DELETE /api/v1/contacts/{contactId}/timeEntries/{timeEntryId}
  4. [4] run_llm_routing_suite.py
  5. [5] desk_test_runner.py
  6. [6] DELETE /api/v1/accounts/{accountId}/timeEntries/{timeEntryId}
  7. [7] server.py: chat_plan_stream
  8. [8] server.py: apply_plan
Delete Task Time Entry | Beam Help — Beam Help