Tickets

Create, list, update, and manage support tickets programmatically. Tickets are the core of the Helmdesk helpdesk — each belongs to a project and is linked to a customer.

POST/api/v1/tickets

Create a support ticket. A customer record is automatically created or matched by email.

const ticket = await helmdesk.tickets.create({
  subject: 'Cannot login',
  body: 'I keep getting a 403 error when...',
  customerEmail: 'user@example.com',
  customerName: 'Jane Smith',
  priority: 'high',
})
GET/api/v1/tickets

List tickets with pagination. Filter by status, priority, category, assignee, exact ticket number, or search by subject/email. The assignee filter accepts a user id, a comma-separated list, or 'unassigned'.

const { tickets, total } = await helmdesk.tickets.list({
  status: 'open',
  priority: 'high',
  assignee: 'unassigned',
  category: 'billing',
  number: 42, // exact "#42" lookup
  page: 1,
  limit: 25,
})
GET/api/v1/tickets/:id

Get full ticket details including messages, tags, and customer info.

const ticket = await helmdesk.tickets.get('ticket-uuid')
// ticket.messages, ticket.tags, ticket.customer
PATCH/api/v1/tickets/:id

Update ticket status, priority, category, or assignee. The assignee must be an active member of your account — discover valid ids with the members endpoint below.

await helmdesk.tickets.update('ticket-uuid', {
  status: 'resolved',
  priority: 'low',
  assignedTo: 'user-uuid', // or null to unassign
})
POST/api/v1/tickets/:id/messages

Reply to a ticket as staff. The reply is appended to the thread, emailed to the customer, and a 'new' ticket transitions to 'open'.

await helmdesk.tickets.addMessage('ticket-uuid', {
  body: 'Thanks for reaching out! Here\'s how to fix it...',
})
GET/api/v1/members

List the active members of your account (id, name, email, role) — the valid assignedTo values for ticket assignment. Requires the tickets:read scope.

const { members } = await helmdesk.team.list()
// members[0].userId → use as assignedTo
POST/api/v1/tickets/:id/tags

Add a tag (label) to a ticket for triage or categorization. Idempotent — adding an existing tag is a no-op. Returns the ticket's full tag list.

const { tags } = await helmdesk.tickets.addTag('ticket-uuid', 'needs-engineering')
DELETE/api/v1/tickets/:id/tags

Remove a tag from a ticket. Returns the ticket's remaining tags.

const { tags } = await helmdesk.tickets.removeTag('ticket-uuid', 'needs-engineering')

Ticket statuses

newopenpendingresolvedclosed

Priority levels

lowmediumhighurgent