Deleting a transition attachment in Zoho Desk requires a targeted API call that references the ticket, the specific transition draft, and the attachment you want to remove — three IDs working together.
Why this matters
When agents work through blueprint transitions in Zoho Desk, they can attach files to a transition draft before submitting it. If an incorrect or outdated file is attached, you need a clean way to remove it programmatically without affecting the ticket's other attachments or threads. This is especially relevant for teams automating support workflows via the Zoho Desk REST API.
> Note: Beam Help is independent expert support for Zoho — we are not official Zoho support.
---
Step-by-step
Step 1. Gather the three required identifiers before making any API call: the ticketId of the ticket undergoing the transition, the transitionId of the active blueprint transition draft, and the attachmentId of the specific file you want to delete. [1]
Step 2. If you are unsure of the attachmentId, first retrieve the list of attachments on the transition draft by sending a GET request to /api/v1/tickets/{ticketId}/transitions/{transitionId}/attachments. The response will include the IDs of all files currently attached to that draft. [7]
Step 3. Once you have all three IDs, send a DELETE request to the following endpoint:
DELETE /api/v1/tickets/{ticketId}/transitions/{transitionId}/attachments/{attachmentId}
Replace {ticketId}, {transitionId}, and {attachmentId} with the actual values you collected in the previous steps. [1]
Step 4. If you are working in Python, the call maps to the op16deleteattachmentof_transition operation. A minimal implementation looks like this: [1]
def op_16_delete_attachment_of_transition(self, ticketId: str, transitionId: str, attachmentId: str, p: dict = None):
return self.c.request(
"DELETE",
f"/api/v1/tickets/{ticketId}/transitions/{transitionId}/attachments/{attachmentId}",
p,
None
)
Pass your credential/session context through self.c, and supply the three string IDs as arguments. [1]
Step 5. Confirm the deletion by re-running the GET request from Step 2. If the attachment list no longer contains the target attachmentId, the operation was successful. [7]
---
Common pitfalls
- Wrong endpoint for the wrong attachment type. Zoho Desk exposes several distinct attachment-deletion endpoints. Use
/api/v1/tickets/{ticketId}/transitions/{transitionId}/attachments/{attachmentId}specifically for transition draft attachments. [1] Do *not* confuse this with the general ticket attachment endpoint (/api/v1/tickets/{ticketId}/attachments/{attachmentId}) [6], the thread-level attachment endpoint (/api/v1/tickets/{ticketid}/threads/{threadid}/attachments/{attachment_id}) [2], or the task attachment endpoint (/api/v1/tasks/{taskId}/attachments/{attachmentId}). [5] Each targets a different resource.
- Stale or invalid
transitionId. Blueprint transitions are draft objects tied to a specific workflow state. If the transition has already been submitted or cancelled, thetransitionIdmay no longer be valid, and the delete call will fail. Always verify the transition is still in a draft state before attempting deletion. [1]
- Missing
attachmentId. Attempting the DELETE without first confirming theattachmentIdvia the GET endpoint is a common source of 404 errors. Use the list endpoint to confirm the file exists on the transition before deleting it. [7]
---
What to check
- All three IDs are correct and current — confirm
ticketId,transitionId, andattachmentIdare valid and that the transition draft is still open before issuing the DELETE. [1] - The correct endpoint is targeted — verify you are calling the transitions-specific path, not a ticket-level or thread-level attachment route. [1][2][6]
- Deletion is confirmed — re-run the GET on
/api/v1/tickets/{ticketId}/transitions/{transitionId}/attachmentsand check that the removed file no longer appears in the response. [7]