Skip to main content

Tickets

The Tickets API provides CRUD access to support tickets plus status, archive/restore, tags and the reply conversation.
New to the API? Start with Getting started (base URL, response envelope, errors, pagination) and Authentication (API keys).
Identifier note: tickets are addressed by their numeric ticket_id.
A ticket belongs to a department and a client. The department is a category of type ticket. Tickets are created in client mode (an existing client). The web’s email/IMAP “new user” ingestion is out of API scope.
Silent semantics. Creating tickets and posting replies records the data and updates the ticket, but does not fire the web’s events/notifications, send the event-driven client emails, or trigger web→IMAP conversion (consistent with the rest of the API).
Scope: file attachments (upload/download), canned responses, sticky notes, pinning, bulk actions, inbound IMAP/email threading and the history view are out of API scope.

The ticket object

{
  "id": 32,
  "subject": "Cannot log in",
  "message": "I get an error on the login page.",
  "status": { "id": 1, "title": "Open" },
  "priority": "high",
  "source": "web",
  "active_state": "active",
  "department": { "id": 72, "name": "Sales" },
  "client": { "id": 1, "name": "Acme Inc" },
  "project_id": null,
  "creator_id": 1,
  "dates": { "created": "...", "last_updated": "...", "status_changed": null },
  "replies_count": 2,
  "tags": ["billing"]
}
FieldTypeNotes
idintegerTicket id.
subject / messagestringThe opening message.
statusobject{ id, title } (1 Open, 2 Closed, 3 On Hold, 4 Answered, 5 Customer Replied).
prioritystringnormal, high or urgent.
sourcestringweb or email (set automatically).
active_statestringactive or archived.
departmentobjectThe category (type ticket).
client / project_idobject/intLinks.
replies_countintNumber of replies.
tagsarrayTag titles.

List / search tickets

GET /api/tickets
Query params: status, priority, category_id, client_id, project_id, active_state, search, tags[], sort (ticket_created,ticket_last_updated,ticket_priority,ticket_status), order, limit, page.
curl -G https://your-domain/api/tickets -H "Authorization: Bearer YOUR_API_KEY" -d status=1

Get a ticket

GET /api/tickets/{id}

Create a ticket

POST /api/tickets
ParameterTypeRequiredNotes
ticket_clientidintegeryesExisting client.
ticket_categoryidintegeryesA department (category of type ticket).
ticket_projectidintegernoMust belong to the client.
ticket_subjectstringyes
ticket_messagestringyes
ticket_prioritystringyesnormal, high or urgent.
custom fieldsmixedvariesAny enabled ticket custom fields (required ones are enforced).
curl -X POST https://your-domain/api/tickets -H "Authorization: Bearer YOUR_API_KEY" \
  -d ticket_clientid=1 -d ticket_categoryid=72 -d ticket_subject="Cannot log in" \
  -d ticket_message="I get an error" -d ticket_priority=high
Returns the new ticket (201).

Update a ticket

PATCH /api/tickets/{id}
Edits the department/project/subject/message/priority (status has its own setter).
ParameterTypeRequired
ticket_categoryidintegeryes
ticket_projectidintegerno
ticket_subjectstringyes
ticket_messagestringyes
ticket_prioritystringyes

Delete a ticket

DELETE /api/tickets/{id}

Change status

PUT /api/tickets/{id}/status
ParameterTypeNotes
statusintegerA ticketstatus_id (1 Open, 2 Closed, 3 On Hold, 4 Answered, 5 Customer Replied).
curl -X PUT https://your-domain/api/tickets/32/status -H "Authorization: Bearer YOUR_API_KEY" -d status=2

Archive / restore

PUT /api/tickets/{id}/archive
PUT /api/tickets/{id}/restore

Set tags

PUT /api/tickets/{id}/tags
Full-set replace (empty clears).

The conversation (replies)

GET    /api/tickets/{id}/replies            list the conversation
POST   /api/tickets/{id}/replies            post a reply
DELETE /api/tickets/{id}/replies/{reply_id} delete a reply
Post a reply:
ParameterTypeRequiredNotes
ticketreply_textstringyesThe message.
ticketreply_typestringnoreply (default) or note.
curl -X POST https://your-domain/api/tickets/32/replies -H "Authorization: Bearer YOUR_API_KEY" \
  -d ticketreply_text="We are looking into this for you."
Returns the new reply (201). Posting a reply updates the ticket’s last-updated timestamp but does not send a client email (silent semantics).

Errors

See Getting started. Ticket-specific:
StatusMeaning
404 Not FoundThe ticket (or reply) id does not exist.
422 Unprocessable EntityValidation failed (missing fields, non-ticket department, invalid priority/status, or a project that does not belong to the client).