Get one ticket with its full timeline
Everything the ticket detail view needs in one call: the ticket, its resolved assignee/customer/agent/team names, its SLA state, its own logged time and todo counts, and its comple...
/v1/tickets/{ticket_id}Viewer- Operation id
- get_ticket
- Access
- Any workspace role can call this.
/v1/tickets/{ticket_id}Everything the ticket detail view needs in one call: the ticket, its resolved assignee/customer/agent/team names, its SLA state, its own logged time and todo counts, and its complete event timeline in ascending order.
legal_next_states is the exact set PATCH /v1/tickets/{ticket_id} will
accept as a status target. An empty list means the ticket is terminal and
only POST /v1/tickets/{ticket_id}/reopen can move it.
events is the whole timeline, oldest first, and it is not paged. It
carries customer messages, operator replies, internal notes and every
recorded change, each with who made it and when.
Tenancy: the request is scoped to one workspace, and the credential presented is what selects it. A caller with no membership in that workspace is refused with 404, which is indistinguishable from a workspace that does not exist.
Authorisation: any workspace role, including viewer. Reads are open to every member.
Access: Authorization: Bearer carrying either a realm access token or an API key. A key must hold the tickets:read scope, and the workspace role of the person who owns it must meet the floor above.
A realm-issued access token, presented as Authorization: Bearer <token>. It acts as the person who signed in, and every operation resolves their workspace role live from the membership record.
In: header
Path Parameters
uuidResponse Body
application/json
application/json
application/json
curl -X GET "https://example.com/v1/tickets/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "id": "5e8b0c31-7a4d-4f92-b6c8-1d3e2a5f7b90", "subject": "Card declined at checkout", "description": "Customer's Visa is declined on every attempt since Tuesday.", "status": "open", "priority": "high", "source": "email", "assignee_id": "3fe98b76-2409-5003-b75a-93e56b450433", "assignee_name": "Dana Osei", "customer_id": "9f1d6c4e-6b6e-4b31-9a5b-2f1c9a4d5e60", "customer_name": "Sam Okafor", "customer_email": "sam.okafor@northwind.example", "team_id": "d907a188-148a-5522-82a6-55798ccdecb6", "team_name": "Billing", "tags": [ "billing", "vip" ], "metadata": { "order_id": "A-1042" }, "first_response_due": "2026-08-14T12:20:00+00:00", "resolution_due": "2026-08-15T10:20:00+00:00", "sla_breached": false, "sla_policy_id": "b6a0f2d7-4c19-4e63-8f52-7a1b9c0d3e46", "created_at": "2026-08-14T10:20:00+00:00", "updated_at": "2026-08-14T10:20:00+00:00", "legal_next_states": [ "closed", "on_hold", "pending", "solved", "spam" ], "assignee_email": "dana.osei@northwind.example", "time_total_minutes": 25, "time_billable_minutes": 25, "todo_counts": { "open": 1, "done": 2, "overdue": 0 }, "events": [ { "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d", "kind": "inbound_email", "body": "My card is declined every time I try to pay.", "meta": { "channel": "email", "external_id": "0100019180a4c1f2" }, "actor_type": "customer", "created_at": "2026-08-14T10:20:00+00:00" }, { "id": "f0e9d8c7-b6a5-4948-9382-71605f4e3d2c", "kind": "internal_note", "body": "Payment provider is returning a soft decline on this BIN.", "meta": {}, "actor_user_id": "3fe98b76-2409-5003-b75a-93e56b450433", "actor_type": "user", "actor_name": "Dana Osei", "created_at": "2026-08-14T10:41:12+00:00" } ]}