Identify the ticket IDs to update and the shared field changes to apply; the Update Many endpoint applies the same update body to all specified tickets.
Send a PUT to /api/v2/tickets/update_many.json?ids={comma-separated ticket IDs} (up to 100 IDs) with a JSON body containing a ticket object that includes the fields to change.
To update custom fields, include a custom_fields array inside the ticket object where each element is an object with id (the field ID) and value (the new value).
Parse the response; large bulk updates run asynchronously and the API returns a job_status object with an id rather than the updated tickets directly.
Poll GET /api/v2/job_statuses/{job_status_id} until the status field is completed or failed; the results array in the completed response lists per-ticket outcomes.
For query-based bulk updates (targeting tickets by search criteria rather than explicit IDs), use PUT /api/v2/tickets/update_many.json?query= with a Zendesk search query string instead of an IDs list.
Known gotchas
The Update Many endpoint applies the same ticket object to every specified ticket; it is not possible to set different values per ticket in a single call — for per-ticket variation, use individual PATCH requests or the Bulk Import API.
Custom field IDs must be the numeric field ID, not the field key or title; using a field key will silently fail to update the field without returning a validation error on some plan tiers.
Bulk updates count as a single API request against the rate limit regardless of how many tickets are in the batch, but asynchronous job completion is not guaranteed within any specific time window — do not assume the job is done within seconds of receiving the job_status object.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp