Skip to main content

List Agent Queue Tickets

GET 

/api/support/agent/tickets

Lists tickets across every tenant for the agent console. queue selects which slice to return:

Required scope: support:read

Grant this scope to your token under Settings → Developer → Personal Access Tokens.

  • triage — unresolved tickets that are unassigned AND that no agent has taken on yet, oldest first
  • unassigned — unresolved tickets with no assignee
  • mine — unresolved tickets assigned to the caller
  • open (default) — every unresolved ticket
  • waiting — status is waiting_on_customer
  • awaiting_release — status is awaiting_release
  • breaching — unresolved, SLA not paused, and either clock is past its due date or past the policy's warning point (by default 75% of the way from creation to the due date) without having been met — the same tickets that report breached or breaching_soon
  • snoozed — tickets snoozed until a moment still in the future
  • resolved — resolved or closed tickets
  • all — every ticket, any status

Snoozed tickets are hidden from every queue except snoozed and all until their snoozed_until passes.

Each row carries the agent-side fields on top of the customer view: group_key, external_ref, note_count, merged_into_ticket_id, sla_policy_id, created_by_user_id, sla_paused_at, snoozed_until / is_snoozed, follow_up_at, triaged_at with triaged_by_user_id, important_to_customer, and the agent-facing status_label. 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. participants, links and ai are not included in list rows — fetch the ticket for those.

Additional filters: environment (a single value or a comma-separated list of production, beta, demo, dev; all means no filter — also accepted as filter[environment]), tenant_id, assignee_user_id, requester_user_id (everything one person raised, across tenants), important (only tickets flagged important to their tenant), updated_after (a date-time; only tickets touched since), group_key, status, priority, type (each of the last three a single value or a comma-separated list), search (free text over the subject, recent public messages, requester, tenant name and tags; 2451 or #2451 also matches the ticket id). A search sent without queue spans every status — resolved and closed tickets included — so a match is never hidden by the default open slice; send queue explicitly to search inside one slice.

Sort: sort — allowed values priority (default, urgent first, then by first-response due date), updated_at, created_at, first_response_due_at, resolution_due_at, important_to_customer (flagged tickets first, then by priority), environment; an unknown value falls back to the default. The triage queue defaults to created_at ascending instead, so the oldest untouched ticket is first. direction — asc or desc (default desc).

Pagination: standard Laravel pagination, per_page default 10, maximum 100.

Authentication: Bearer token with the support:read scope, or an authenticated session, from a caller with an active support role. No tenant context — this endpoint is central.

One desk serves every SKU.io environment: a row's environment is production, or beta / demo / dev for a ticket another environment forwarded in, with origin_tenant_id and origin_host naming where it came from.

Request

Responses

OK

Response Headers
    Content-Type