Deleting a custom field in Zoho Desk can be done via the API using one of two dedicated DELETE endpoints, depending on whether the field is a ticket field or an organisation-level field. This is a permanent, irreversible schema change — proceed with care.
Why this matters
Custom fields accumulate over time as workflows evolve, and stale fields clutter your ticket forms, confuse agents, and can interfere with automations. You may need to remove a field when consolidating data models, retiring a process, or cleaning up a sandbox configuration before going live. Because our team (Beam Help — independent expert support for Zoho, not official Zoho support) has verified this operation carries a HIGH risk level, understanding the correct endpoint and required permissions before you act is essential. [3]
---
Step-by-step
Step 1. Confirm your OAuth token includes the correct Zoho Desk scopes before making any destructive call. At minimum you need Desk.settings.ALL or the combination of Desk.settings.DELETE and Desk.settings.READ to authorise field-management operations. [4]
Step 2. Identify which type of custom field you want to remove:
- A ticket-specific custom field — use the ticket fields endpoint.
- An organisation-level custom field tied to a particular module (e.g., Contacts, Accounts) — use the organisation fields endpoint. [1][2]
Step 3. To delete a ticket custom field, send a DELETE request to:
DELETE /api/v1/ticketFields/custom/{field_id}
Replace {field_id} with the unique identifier of the field you want to remove. In Python this looks like: [1]
delete_custom_field(field_id="<your_field_id>")
Step 4. To delete an organisation-level custom field (for modules such as Contacts or Accounts), send a DELETE request to:
DELETE /api/v1/organizationFields/{moduleName}/{fieldId}
Supply both the moduleName (e.g., "Contacts") and the fieldId of the target field. In Python: [2]
delete_custom_field_2(moduleName="Contacts", fieldId="<your_field_id>")
Step 5. If the field you are removing has picklist or dropdown options that need to be cleaned up independently first, you can delete individual options before removing the parent field. Use:
DELETE /api/v1/organizationFields/{moduleName}/{fieldId}/options/{optionId}
Pass the moduleName, fieldId, and the specific optionId for each option you want to remove. [6]
Step 6. Check the HTTP response status. A successful deletion will return a 2xx status code. If you receive a 401, your OAuth token has expired or lacks the required scopes — reconnect and retry. [7]
---
Common pitfalls
- Wrong endpoint for the field type. Using the ticket fields endpoint (
/api/v1/ticketFields/custom/{field_id}) for an organisation-level field (or vice versa) will result in an error. Always confirm the field's module context before choosing your endpoint. [1][2] - Insufficient OAuth scopes. Missing
Desk.settings.DELETEin your token will cause a401or permission error. Double-check that your scope string includes the fullDesk.settings.ALLor the explicit DELETE variant. [4] - Confusing field deletion with module deletion. The endpoint
DELETE /api/v1/modules/{moduleId}removes an entire custom module, not a single field. Do not use this when you only intend to delete one field. [8] - Irreversibility. This operation is flagged as a permanent schema change. There is no undo. Export or document any data stored in the field before proceeding. [3]
---
What to check
- Verify the field no longer appears in your Zoho Desk ticket or organisation field list by fetching the field index after deletion.
- Confirm no active automations or workflows reference the deleted field — rules that depend on a removed field may silently fail or throw errors on ticket creation.
- Ensure your OAuth scopes are correctly set (
Desk.settings.ALLor equivalent) so future field-management calls continue to work without re-authentication. [4]