Tickets API reference

Tickets endpoints of the Quackback REST API: paths, parameters, request fields and responses.

JM
James Morton
Written By James MortonLast updated 4 days ago

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 statuses
  • GET /tickets: List tickets
  • POST /tickets: Create a ticket
  • GET /tickets/{ticketId}: Get a ticket
  • GET /tickets/{ticketId}/messages: List messages in a ticket thread
  • POST /tickets/{ticketId}/reply: Reply to a ticket
  • POST /tickets/{ticketId}/note: Add an internal note to a ticket
  • POST /tickets/{ticketId}/status: Set a ticket status
  • POST /tickets/{ticketId}/assign: Assign a ticket
  • POST /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

type

query

string (customer, back_office, tracker)

No

Filter by ticket type

ticketTypeId

query

string

No

Filter by registry ticket-type ID (see the ticketType field on tickets)

statusCategory

query

string (open, pending, closed)

No

Filter by internal status category

stage

query

string (received, in_progress, awaiting_requester, resolved)

No

Filter by customer-facing public stage

requesterPrincipalId

query

string

No

Filter by requester principal ID

companyId

query

string

No

Filter by company ID

sort

query

string (recent, oldest, created, priority)

No

Sort order

limit

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

type

string (customer, back_office, tracker)

No

Ticket object type

ticketTypeId

string

No

Registry ticket-type ID , its category becomes the ticket type

title

string

Yes

description

string

No

Opening message as markdown

priority

string (none, low, medium, high, urgent)

No

requesterPrincipalId

string

No

Requester principal ID

companyId

string

No

Associated company ID

attachments

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

ticketId

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

ticketId

path

string

Yes

Ticket ID

includeInternal

query

boolean

No

Include internal teammate notes (default: false)

before

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

ticketId

path

string

Yes

Ticket ID

Request body

Field

Type

Required

Description

content

string

Yes

Message body as markdown

attachments

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

ticketId

path

string

Yes

Ticket ID

Request body

Field

Type

Required

Description

content

string

Yes

Message body as markdown

attachments

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

ticketId

path

string

Yes

Ticket ID

Request body

Field

Type

Required

Description

statusId

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

ticketId

path

string

Yes

Ticket ID

Request body

Field

Type

Required

Description

assigneePrincipalId

string

No

Teammate principal id; null clears, omit to leave unchanged

assigneeTeamId

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

ticketId

path

string

Yes

Ticket ID

Request body

Field

Type

Required

Description

priority

string (none, low, medium, high, urgent)

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.