Docs Blog Sign in

Tickets

Tickets are the core resource in Helpdesk. Each ticket represents a customer support request.

The ticket object

AttributeTypeDescription
idstringUnique identifier (e.g. tkt_abc123)
subjectstringTicket subject line
statusstringnew, open, pending, resolved, closed
prioritystringlow, normal, high, urgent
typestringquestion, incident, problem, task
assigneeIdstring | nullID of the assigned agent
requesterEmailstringEmail of the customer who created the ticket
requesterNamestringName of the customer
tagsarrayList of tag strings
customFieldsarrayCustom field values (see below)
createdAtstringCreation time (ISO 8601 UTC)
updatedAtstringLast update time (ISO 8601 UTC)

Custom field values

Each entry in the customFields array has:

AttributeTypeDescription
idstringThe custom field definition ID
valuemixedThe field value, typed according to the field definition

List tickets

GET /helpdesk/api/v1/tickets

Returns a cursor-paginated list of tickets.

Query parameters

ParameterTypeRequiredDescription
statusstringnoFilter by status
prioritystringnoFilter by priority
assignee_idstringnoFilter by assignee
page_sizeintegernoResults per page (default: 25, max: 100)
afterstringnoCursor for next page
sort_bystringnocreated_at, updated_at, status, priority (default: created_at)
sort_orderstringnoasc or desc (default: desc)

Response

{
  "tickets": [ ... ],
  "meta": { "pageSize": 25, "hasMore": true },
  "links": { "next": "/api/v1/tickets?after=..." }
}

Retrieve a ticket

GET /helpdesk/api/v1/tickets/:id

Response

{
  "ticket": { ... }
}

Create a ticket

POST /helpdesk/api/v1/tickets

Requires write permission.

Request body

{
  "ticket": {
    "subject": "Cannot log in",
    "status": "new",
    "priority": "high",
    "type": "incident",
    "requesterEmail": "customer@example.com",
    "requesterName": "Jane Doe",
    "assigneeId": "usr_abc123",
    "tags": ["billing", "urgent"],
    "customFields": [
      { "id": "cf_abc", "value": "Enterprise" }
    ]
  }
}
FieldTypeRequiredDescription
subjectstringyesSubject line
statusstringnoDefaults to new
prioritystringnoDefaults to normal
typestringnoDefaults to question
requesterEmailstringnoCustomer email
requesterNamestringnoCustomer name
assigneeIdstringnoAgent to assign
tagsarraynoTag strings
customFieldsarraynoCustom field values ({ id, value })

Response

Returns 201 Created with the ticket object. Dispatches a ticket.created webhook event.

Update a ticket

PUT /helpdesk/api/v1/tickets/:id

Requires write permission.

Request body

{
  "ticket": {
    "status": "pending",
    "priority": "urgent",
    "assigneeId": "usr_xyz789",
    "tags": ["escalated"],
    "customFields": [
      { "id": "cf_abc", "value": "Pro" }
    ]
  }
}

All fields are optional. Only provided fields are updated. Dispatches ticket.updated (and ticket.assignment.changed if assignee changes) webhook events.

Delete a ticket

DELETE /helpdesk/api/v1/tickets/:id

Requires write permission. Returns 204 No Content. Dispatches a ticket.deleted webhook event.

Error codes

CodeStatusDescription
BAD_REQUEST400Request body missing ticket object
VALIDATION_ERROR422Required field missing or invalid
NOT_FOUND404Ticket not found