Skip to main content

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.

Required scope: support:write

Grant 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, resolved
  • public_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​

OK

Response Headers
    Content-Type