Post Agent Ticket Progress
POST/api/support/agent/tickets/:ticket/progress
Sets the ticket's work stage and, optionally, the one-line progress update the customer sees on their ticket. A changed stage records a customer-visible stage_changed event ("Now: Investigating"); a progress line records a customer-visible progress_posted event. Any progress also counts as a sign of life for the stale check.
support:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
The stage may not contradict the status. waiting_on_you is only allowed while the status is waiting_on_customer, resolved only once the ticket is resolved or closed, and every other stage only on an unresolved ticket that is not waiting on the customer — otherwise the request is refused with a 422 on stage (change the status with Update Agent Ticket instead). An active stage (picked_up, investigating, fixing) sent on an open ticket moves it to in_progress first.
Progress lines never announce releases: text mentioning deploys, releases or PRs (deploy, deployed, deployment, release, released, pull request, PR …) is refused with a 422 on public_text.
A human agent may post progress on any ticket they can work. The AI agent may only post on a ticket it owns — otherwise 409 not_owner.
Path parameters
ticket(integer) — the ticket id.
Request body
stage(string, required) — one of: received, picked_up, investigating, fixing, waiting_on_you, resolvedpublic_text(string, optional, nullable, max 280) — the progress line shown to the customer (work.progress_text). Omit it to change only the stage.
The response is the updated ticket in the agent shape (see Get Agent Ticket for every field, including work).
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). No tenant context — this endpoint is central.
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
- 409
- 422
- 429
OK
Response Headers
Unauthorized
Response Headers
Forbidden
Response Headers
Not Found
Response Headers
Conflict
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.