Tickets API reference
Tickets endpoints of the Quackback REST API: paths, parameters, request fields and responses.
This is the reference for the Tickets endpoints of the Quackback REST API: every endpoint, its parameters, request fields and response fields. It is generated from the API's OpenAPI description, so it matches what the API accepts.
All paths are relative to /api/v1 on your workspace's address (for example https://feedback.example.com/api/v1). Authenticate with an API key in the Authorization: Bearer qb_... header. For keys, errors, pagination and rate limits, see API overview. Every workspace also serves an interactive reference at /api/v1/docs.
Endpoints
GET /ticket-statuses: List ticket statusesGET /tickets: List ticketsPOST /tickets: Create a ticketGET /tickets/{ticketId}: Get a ticketGET /tickets/{ticketId}/messages: List messages in a ticket threadPOST /tickets/{ticketId}/reply: Reply to a ticketPOST /tickets/{ticketId}/note: Add an internal note to a ticketPOST /tickets/{ticketId}/status: Set a ticket statusPOST /tickets/{ticketId}/assign: Assign a ticketPOST /tickets/{ticketId}/priority: Set a ticket priority
List ticket statuses
GET /api/v1/ticket-statuses
Returns the workspace's ticket statuses (ordered by category then position). Use these ids with POST /tickets/{ticketId}/status. Requires a team-role API key.
Response 200: returns id, name, slug, color, category, stage, position, isDefault.
List tickets
GET /api/v1/tickets
Returns tickets for the workspace (a team-role API key sees every ticket). Requires a team-role API key.
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| query | string ( | No | Filter by ticket type |
| query | string | No | Filter by registry ticket-type ID (see the ticketType field on tickets) |
| query | string ( | No | Filter by internal status category |
| query | string ( | No | Filter by customer-facing public stage |
| query | string | No | Filter by requester principal ID |
| query | string | No | Filter by company ID |
| query | string ( | No | Sort order |
| query | integer | No | Items per page (max 100) |
Response 200: returns id, number, reference, type, ticketType, title, status, stage, priority, requesterPrincipalId, assigneePrincipalId, assigneeTeamId, companyId, firstResponseAt, dueAt, resolvedAt, createdAt, updatedAt, reopenedCount.
Create a ticket
POST /api/v1/tickets
Open a ticket as a team API key. Requires a team-role API key.
Request body
Field | Type | Required | Description |
|---|---|---|---|
| string ( | No | Ticket object type |
| string | No | Registry ticket-type ID , its category becomes the ticket type |
| string | Yes | |
| string | No | Opening message as markdown |
| string ( | No | |
| string | No | Requester principal ID |
| string | No | Associated company ID |
| array of object | No |
Response 201: returns id, number, reference, type, ticketType, title, status, stage, priority, requesterPrincipalId, assigneePrincipalId, assigneeTeamId, companyId, firstResponseAt, dueAt, resolvedAt, createdAt, updatedAt, reopenedCount.
Get a ticket
GET /api/v1/tickets/{ticketId}
Get a single ticket by ID. Requires a team-role API key.
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Ticket ID |
Response 200: returns id, number, reference, type, ticketType, title, status, stage, priority, requesterPrincipalId, assigneePrincipalId, assigneeTeamId, companyId, firstResponseAt, dueAt, resolvedAt, createdAt, updatedAt, reopenedCount.
List messages in a ticket thread
GET /api/v1/tickets/{ticketId}/messages
Returns a ticket thread oldest-first. Internal teammate notes are excluded unless includeInternal=true. Requires a team-role API key.
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Ticket ID |
| query | boolean | No | Include internal teammate notes (default: false) |
| query | string | No | Message ID cursor for the next older page (from meta.pagination.cursor) |
Response 200: returns id, ticketId, senderType, isInternal, authorPrincipalId, authorName, content, contentJson, attachments, createdAt.
Reply to a ticket
POST /api/v1/tickets/{ticketId}/reply
Send a customer-visible agent reply on a ticket thread.
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Ticket ID |
Request body
Field | Type | Required | Description |
|---|---|---|---|
| string | Yes | Message body as markdown |
| array of object | No |
Response 201: returns id, ticketId, senderType, isInternal, authorPrincipalId, authorName, content, contentJson, attachments, createdAt.
Add an internal note to a ticket
POST /api/v1/tickets/{ticketId}/note
Add an agent-only internal note (never visible to the requester).
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Ticket ID |
Request body
Field | Type | Required | Description |
|---|---|---|---|
| string | Yes | Message body as markdown |
| array of object | No |
Response 201: returns id, ticketId, senderType, isInternal, authorPrincipalId, authorName, content, contentJson, attachments, createdAt.
Set a ticket status
POST /api/v1/tickets/{ticketId}/status
Move a ticket to a workspace status id (see GET /ticket-statuses).
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Ticket ID |
Request body
Field | Type | Required | Description |
|---|---|---|---|
| string | Yes | Target ticket status id (see GET /ticket-statuses) |
Response 200: returns id, number, reference, type, ticketType, title, status, stage, priority, requesterPrincipalId, assigneePrincipalId, assigneeTeamId, companyId, firstResponseAt, dueAt, resolvedAt, createdAt, updatedAt, reopenedCount.
Assign a ticket
POST /api/v1/tickets/{ticketId}/assign
Assign a ticket to a teammate and/or a team. Pass null to clear a side.
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Ticket ID |
Request body
Field | Type | Required | Description |
|---|---|---|---|
| string | No | Teammate principal id; null clears, omit to leave unchanged |
| string | No | Team id; null clears, omit to leave unchanged |
Response 200: returns id, number, reference, type, ticketType, title, status, stage, priority, requesterPrincipalId, assigneePrincipalId, assigneeTeamId, companyId, firstResponseAt, dueAt, resolvedAt, createdAt, updatedAt, reopenedCount.
Set a ticket priority
POST /api/v1/tickets/{ticketId}/priority
Set the triage priority on a ticket.
Parameters
Name | In | Type | Required | Description |
|---|---|---|---|---|
| path | string | Yes | Ticket ID |
Request body
Field | Type | Required | Description |
|---|---|---|---|
| string ( | Yes |
Response 200: returns id, number, reference, type, ticketType, title, status, stage, priority, requesterPrincipalId, assigneePrincipalId, assigneeTeamId, companyId, firstResponseAt, dueAt, resolvedAt, createdAt, updatedAt, reopenedCount.
Was this helpful?
Your feedback shapes what we write next.
