Claim Agent Ticket
POST/api/support/agent/tickets/:ticket/claim
Makes the caller the ticket's single owner. A ticket has one owner at a time — a human agent or the AI agent — and a claim is the lock: claiming a ticket someone else owns is refused with 409 owned_by_another_agent (naming the current owner) unless force is sent, which takes the ticket over. The AI agent can never force; for it a 409 means "someone else is on this — leave it". Claiming a ticket you already own is a no-op (still 200).
support:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
What a claim does: sets assignee / work.owner to the caller and starts a fresh working state (work.phase cleared, work.active_until set to now); the very first claim stamps work.picked_up_at and work.picked_up_by_user_id, which never move afterwards; a ticket still at the received stage moves to picked_up; an open ticket moves to in_progress; the ticket counts as triaged. A customer-visible picked_up event is recorded ("Picked up by Priya", or "Picked up by SKU.io Support (AI-assisted)" for the AI agent). Taking a ticket over from the AI agent also records a released event with reason take_over. Any approval card the AI agent left pending stays open for the new owner to decide.
Path parameters
ticket(integer) — the ticket id.
Request body (all optional)
force(boolean, nullable) — take the ticket over from its current owner. Ignored when the caller is the AI agent.reason(string, nullable, max 500) — why it was claimed; stored on thepicked_upevent.
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.