Update Agent Ticket
PATCH/api/support/agent/tickets/:ticket
Partially updates a ticket from the agent console — status, priority, type, visibility, group, assignee, tenant, tags, or the follow-up reminder. Only the fields present in the request are changed; each change is recorded on the ticket's timeline (see List Agent Ticket Events) and, when anything changed, the ticket_updated automation rules run. Changing priority recomputes the SLA due dates.
support:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Request body (all fields optional — send only what changes):
status(string) — one of: open, in_progress, waiting_on_customer, awaiting_release, resolved, closedpriority(string) — one of: low, medium, high, urgenttype(string, nullable) — one of: bug, question, feature_request, billingvisibility(string) — tenant or requestergroup_key(string, nullable) — one of the configured group keys (see Get Support Meta)assignee_user_id(integer, nullable) — must be a user with an active support role that can work tickets; sendnullto unassigntenant_id(string, nullable) — re-associate the ticket with a different tenant; recorded as atenant_changedevent on the ticket's timelinetags[](array, max 20, each max 40 chars)follow_up_at(string, nullable, ISO-8601 date-time) — a reminder for the assignee; stored in the app timezone (an offset in the value is honoured), recorded as afollow_up_changedevent. Sendnullto clear it.
The response is the updated ticket. The agent view adds group_key, external_ref, note_count, merged_into_ticket_id, sla_policy_id, created_by_user_id, sla_paused_at, snoozed_until (with is_snoozed, true while that moment is still in the future), follow_up_at (the agent's own reminder, or null), the agent-facing status_label, the assignee's email, and ai — the latest completed triage and draft runs that are not withheld. first_response_sla_status and resolution_sla_status report the ticket's two SLA clocks: one of on_track, breaching_soon (past the policy's warning point, by default 75% of the way from creation to the due date), breached, paused (the ticket is waiting on the customer, so neither clock warns), met (responded / resolved before the due date). merged_into is {id, number} once the ticket has been merged into another, otherwise null.
Authentication: Bearer token with the support:write scope, or an authenticated session, from a caller with an active support role that can work tickets (the viewer role is read-only).
If this ticket was merged into another ticket, the request is refused with a 422 whose merged_into (id, number) names the live ticket — send the action there instead.
Request
Responses
- 200
- 401
- 403
- 404
- 422
- 429
OK
Response Headers
Unauthorized
Response Headers
Forbidden
Response Headers
Not Found
Response Headers
Unprocessable Content
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.