Tickets API
List, read, open, reply to, note on, assign and update support tickets over the REST API, with query filters, fields and file attachments.
The Tickets API lets you list and read support tickets and their threads, and open, reply to, note on, assign and update tickets from your own systems. Use it for reporting, syncing to a data warehouse, or creating tickets from another tool. This article summarizes the endpoints. For full schemas, use your workspace's API reference at /api/v1/docs.
Note: Ticket endpoints need an API key with Conversations access (the
read:chatscope to read,write:chatto write), created by a teammate whose role allows the matching ticket permission. Tickets must be turned on in your workspace (the Support module). See the API overview for authentication.
Endpoints
Method | Path | Does |
|---|---|---|
|
| List tickets |
|
| Open a ticket |
|
| Get one ticket |
|
| Get the ticket's thread |
|
| Reply to the requester |
|
| Add an internal note |
|
| Change the status |
|
| Change the priority |
|
| Assign to a teammate or team |
List tickets
curl "https://feedback.example.com/api/v1/tickets?statusCategory=open&type=customer" \
-H "Authorization: Bearer qb_your_api_key"Query parameter | Values |
|---|---|
|
|
| A ticket type id |
|
|
|
|
| Only tickets from this requester |
| Only tickets for this company |
|
|
| 1 to 100 (default 20) |
An API key sees every ticket in the workspace.
Ticket fields
Field | Description |
|---|---|
| Ticket id, sequential number and display reference |
|
|
| Short summary |
| Status name and its category ( |
| Customer-facing stage |
|
|
| The requester, or |
| The assigned teammate and team |
| The associated company, or |
| Lifecycle timestamps |
| Standard timestamps |
| How many times the ticket was reopened |
Read a ticket's thread
curl "https://feedback.example.com/api/v1/tickets/ticket_01h455vb4pex5vsknk084sn02q/messages?includeInternal=true" \
-H "Authorization: Bearer qb_your_api_key"The thread is returned oldest first. Internal notes are left out unless you pass includeInternal=true. Pass before (a message id from a previous response) to page back through older messages.
Each message has id, ticketId, senderType (agent or visitor), isInternal, authorPrincipalId, authorName, content (Markdown), contentJson, attachments and createdAt.
Open a ticket
curl -X POST https://feedback.example.com/api/v1/tickets \
-H "Authorization: Bearer qb_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"type": "customer",
"title": "Refund not received",
"description": "Customer reports a missing refund for order 1234.",
"priority": "high",
"requesterPrincipalId": "principal_01h..."
}'Field | Notes |
|---|---|
| Required, up to 300 characters |
|
|
| Optional ticket type |
| Optional opening message in Markdown, up to 4,000 characters |
|
|
| Optional requester and company |
| Optional files (see below) |
A customer ticket created with a requester also gets a linked conversation, so the requester can follow it.
Reply, note, status, priority and assignment
Endpoint | Body |
|---|---|
|
|
|
|
|
|
|
|
|
|
curl -X POST https://feedback.example.com/api/v1/tickets/ticket_01h.../reply \
-H "Authorization: Bearer qb_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "content": "We have issued your refund." }'Attach files
Upload the file first with POST /api/v1/files?name=<file name>, sending the raw file as the request body. Then pass the returned id in attachments as [{ "fileId": "file_..." }].
Related articles
Was this helpful?
Your feedback shapes what we write next.
