Skip to main content

Agent Console

📄️Assign Ticket to Me

Assigns the ticket to the calling agent. A no-op (still 200) if the ticket is already assigned to them. 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`.

📄️List Agent Ticket Events

Returns the ticket's audit timeline, oldest first. `event` is one of: created, status_changed, priority_changed, type_changed, visibility_changed, group_changed, assigned, unassigned, replied, noted, watcher_added, watcher_removed, linked, unlinked, reopened, rated, tags_changed, tenant_changed, sla_breached, sla_warning, sla_paused, sla_resumed, ai_triaged, snoozed, unsnoozed, merged, split, mentioned, follow_up_changed, notified, rule_applied. Each event carries the actor (null for system-generated events, with `actor_label` naming the automation, e.g. `ai` or a rule), the from/to values, and any extra metadata.

📄️List Agent Directory

Lists the support agents another agent can choose from — when assigning a ticket or @mentioning someone in an internal note. By default only active seats held by super-admin users who still exist are returned; pass `include_inactive=1` to also get revoked seats, seats whose user is no longer a super admin, and seats whose user has been deleted from sku.io — all reported with `is_active: false`, since `is_active` here means the seat can actually be assigned work (active AND super admin AND not deleted). Entries are sorted by display name, case-insensitively. No pagination.

📄️Rerun AI Triage

Re-runs the AI triage and drafted reply for a ticket from the current thread. Each call starts a new pass and does not overwrite earlier runs; the response is the latest completed run of each kind (`triage`, `draft`) that is not withheld. A run can finish as `done`, `skipped` (a prompt-injection screen matched the ticket text and it was left for a human), `failed`, or `superseded` (a draft replaced by the regenerated one after a release) — only `done` runs are returned. Nothing here reaches the customer; a drafted reply is only sent if an agent sends it.

📄️Get Agent Dashboard Metrics

Returns the agent dashboard numbers for a trailing window: ticket volume by source/type/priority/tenant, first-response and resolution times (median and p90) with SLA attainment, backlog age buckets and current breaches, quality (reopen rate, CSAT, AI draft share / acceptance / currently withheld drafts, the median time from a bug ticket's creation to its linked release), email quarantine and bounce counts, load (active users and open tickets per active user), per-agent open-ticket counts, and a daily trend series.

📄️Record Support Release

Records that a build shipped, for the Jira issues named in `jira_keys`. Every ticket linked (see Add Ticket Link) to one of those issues gets a `deploy` link, an internal note announcing the release (with your `notes` appended), and — if it is still unresolved and not already awaiting release — moves to `awaiting_release`. Any AI drafted reply that was withheld for 'awaiting deploy' on those tickets is released, and the agents are alerted that the fix shipped so the next step is to reply and resolve. Nothing customer-facing is sent by this call. Tickets with no matching link are left untouched; duplicate keys are ignored.