List Agent Queue Tickets
GET/api/support/agent/tickets
Lists tickets across every tenant for the agent console. queue selects which slice to return:
support:readGrant 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 firstunassigned— unresolved tickets with no assigneemine— unresolved tickets assigned to the calleropen(default) — every unresolved ticketwaiting— status is waiting_on_customerawaiting_release— status is awaiting_releasebreaching— 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 reportbreachedorbreaching_soonsnoozed— tickets snoozed until a moment still in the futureresolved— resolved or closed ticketsall— 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
- 200
- 401
- 403
- 429
OK
Response Headers
Unauthorized
Response Headers
Forbidden
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.