Tickets
Tickets are the central resource of the ITSM platform — every incident, service request, problem, change, and task flows through the ticket lifecycle. On this page, we'll dive into the different ticket endpoints you can use to create, triage, update, and resolve tickets programmatically. AI-powered classification enriches each ticket with category, intent, and sentiment automatically at creation time.
The ticket model
The ticket model contains all the information about an ITSM ticket, including its classification, assignment, SLA deadlines, and AI-enriched metadata. Every ticket belongs to an organization (tenant) and follows a defined lifecycle from new through closed or cancelled.
Properties
- Name
id- Type
- string
- Description
Unique identifier for the ticket (UUID).
- Name
ticket_number- Type
- string
- Description
Human-readable ticket number, unique per organization (e.g.,
INC-00042).
- Name
organization_id- Type
- string
- Description
The tenant ID that owns this ticket.
- Name
title- Type
- string
- Description
Short summary of the ticket.
- Name
description- Type
- string
- Description
Detailed description of the issue or request.
- Name
type- Type
- string
- Description
The ticket type. One of
incident,service_request,problem,change, ortask.
- Name
status- Type
- string
- Description
Current lifecycle status. One of
new,open,in_progress,pending,on_hold,resolved,closed, orcancelled.
- Name
priority- Type
- string
- Description
Priority level. One of
critical,high,medium, orlow.
- Name
source- Type
- string
- Description
Channel the ticket originated from. One of
portal,email,phone,chat,api,monitoring, orwalk_in.
- Name
requester_id- Type
- string
- Description
The ID of the user who created the ticket.
- Name
assignee_id- Type
- string
- Description
The ID of the agent assigned to the ticket.
- Name
team_id- Type
- string
- Description
The ID of the team assigned to the ticket.
- Name
category- Type
- string
- Description
Category auto-classified by AI at triage time.
- Name
subcategory- Type
- string
- Description
Subcategory auto-classified by AI at triage time.
- Name
sla_response_due_at- Type
- timestamp
- Description
SLA deadline for first response.
- Name
sla_resolution_due_at- Type
- timestamp
- Description
SLA deadline for resolution.
- Name
ai_confidence- Type
- number
- Description
AI classification confidence score between 0 and 1.
- Name
ai_intent- Type
- string
- Description
Intent detected by the AI model during triage.
- Name
sentiment- Type
- string
- Description
Requester sentiment detected by AI. One of
positive,neutral,negative, orfrustrated.
- Name
created_at- Type
- timestamp
- Description
Timestamp of when the ticket was created.
- Name
updated_at- Type
- timestamp
- Description
Timestamp of when the ticket was last updated.
- Name
resolved_at- Type
- timestamp
- Description
Timestamp of when the ticket was resolved.
- Name
closed_at- Type
- timestamp
- Description
Timestamp of when the ticket was closed.
List all tickets
This endpoint allows you to retrieve a paginated list of all tickets in your organization. By default, a maximum of ten tickets are shown per page. You can filter by status, priority, type, and assignee.
Optional attributes
- Name
status- Type
- string
- Description
Filter tickets by status (e.g.,
open,in_progress,resolved).
- Name
priority- Type
- string
- Description
Filter tickets by priority (e.g.,
critical,high).
- Name
type- Type
- string
- Description
Filter tickets by type (e.g.,
incident,service_request).
- Name
assignee_id- Type
- string
- Description
Filter tickets by assigned agent ID.
- Name
page- Type
- integer
- Description
The page number for pagination.
- Name
limit- Type
- integer
- Description
Limit the number of tickets returned per page.
Request
curl -G http://localhost:3000/v1/tickets \
-H "Authorization: Bearer {token}" \
-d status=open \
-d priority=high \
-d limit=10
Response
{
"has_more": true,
"page": 1,
"limit": 10,
"data": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"ticket_number": "INC-00042",
"organization_id": "org_9f8e7d6c5b4a",
"title": "VPN connection drops every 15 minutes",
"description": "Since this morning, my VPN disconnects approximately every 15 minutes. I have tried restarting the client and my laptop. Running GlobalProtect 6.1 on Windows 11.",
"type": "incident",
"status": "open",
"priority": "high",
"source": "portal",
"requester_id": "usr_a1b2c3d4e5f6",
"assignee_id": "usr_f6e5d4c3b2a1",
"team_id": "team_network_ops",
"category": "Network",
"subcategory": "VPN",
"sla_response_due_at": 1708786800,
"sla_resolution_due_at": 1708873200,
"ai_confidence": 0.94,
"ai_intent": "connectivity_issue",
"sentiment": "frustrated",
"created_at": 1708783200,
"updated_at": 1708784100,
"resolved_at": null,
"closed_at": null
},
{
"id": "b2c3d4e5-f6a7-8901-bcde-f12345678901"
// ...
}
]
}
Create a ticket
This endpoint allows you to create a new ticket. You must provide a title and description at minimum. The system will auto-assign a ticket_number, run AI triage to populate category, subcategory, ai_confidence, ai_intent, and sentiment, and calculate SLA deadlines based on the resolved priority.
Required attributes
- Name
title- Type
- string
- Description
Short summary of the issue or request.
- Name
description- Type
- string
- Description
Detailed description of the issue or request.
Optional attributes
- Name
type- Type
- string
- Description
Ticket type. Defaults to
incidentif not provided. One ofincident,service_request,problem,change, ortask.
- Name
priority- Type
- string
- Description
Priority level. If omitted, AI triage will determine priority automatically. One of
critical,high,medium, orlow.
- Name
source- Type
- string
- Description
Originating channel. Defaults to
api. One ofportal,email,phone,chat,api,monitoring, orwalk_in.
Request
curl http://localhost:3000/v1/tickets \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"title": "Cannot access shared drive after password reset",
"description": "After resetting my Active Directory password this morning, I can no longer access the shared file server. Getting Access Denied errors. Other network resources work fine.",
"type": "incident",
"source": "portal"
}'
Response
{
"id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"ticket_number": "INC-00127",
"organization_id": "org_9f8e7d6c5b4a",
"title": "Cannot access shared drive after password reset",
"description": "After resetting my Active Directory password this morning, I can no longer access the shared file server. Getting Access Denied errors. Other network resources work fine.",
"type": "incident",
"status": "new",
"priority": "medium",
"source": "portal",
"requester_id": "usr_a1b2c3d4e5f6",
"assignee_id": null,
"team_id": null,
"category": "Access Management",
"subcategory": "File Share Permissions",
"sla_response_due_at": 1708801200,
"sla_resolution_due_at": 1708970400,
"ai_confidence": 0.91,
"ai_intent": "access_restoration",
"sentiment": "neutral",
"created_at": 1708790400,
"updated_at": 1708790400,
"resolved_at": null,
"closed_at": null
}
Retrieve a ticket
This endpoint allows you to retrieve a ticket by providing its UUID. Refer to the list at the top of this page to see which properties are included with ticket objects.
Request
curl http://localhost:3000/v1/tickets/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
-H "Authorization: Bearer {token}"
Response
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"ticket_number": "INC-00042",
"organization_id": "org_9f8e7d6c5b4a",
"title": "VPN connection drops every 15 minutes",
"description": "Since this morning, my VPN disconnects approximately every 15 minutes. I have tried restarting the client and my laptop. Running GlobalProtect 6.1 on Windows 11.",
"type": "incident",
"status": "open",
"priority": "high",
"source": "portal",
"requester_id": "usr_a1b2c3d4e5f6",
"assignee_id": "usr_f6e5d4c3b2a1",
"team_id": "team_network_ops",
"category": "Network",
"subcategory": "VPN",
"sla_response_due_at": 1708786800,
"sla_resolution_due_at": 1708873200,
"ai_confidence": 0.94,
"ai_intent": "connectivity_issue",
"sentiment": "frustrated",
"created_at": 1708783200,
"updated_at": 1708784100,
"resolved_at": null,
"closed_at": null
}
Update a ticket
This endpoint allows you to perform a partial update on a ticket. You can update assignment, status, priority, and other mutable fields. Transitioning status to resolved will automatically set resolved_at, and transitioning to closed will set closed_at.
Optional attributes
- Name
status- Type
- string
- Description
Update the ticket lifecycle status.
- Name
priority- Type
- string
- Description
Update the ticket priority level.
- Name
assignee_id- Type
- string
- Description
Reassign the ticket to a different agent.
- Name
team_id- Type
- string
- Description
Reassign the ticket to a different team.
- Name
title- Type
- string
- Description
Update the ticket summary.
- Name
description- Type
- string
- Description
Update the ticket description.
Request
curl -X PATCH http://localhost:3000/v1/tickets/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"status": "in_progress",
"assignee_id": "usr_f6e5d4c3b2a1",
"team_id": "team_network_ops"
}'
Response
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"ticket_number": "INC-00042",
"organization_id": "org_9f8e7d6c5b4a",
"title": "VPN connection drops every 15 minutes",
"description": "Since this morning, my VPN disconnects approximately every 15 minutes. I have tried restarting the client and my laptop. Running GlobalProtect 6.1 on Windows 11.",
"type": "incident",
"status": "in_progress",
"priority": "high",
"source": "portal",
"requester_id": "usr_a1b2c3d4e5f6",
"assignee_id": "usr_f6e5d4c3b2a1",
"team_id": "team_network_ops",
"category": "Network",
"subcategory": "VPN",
"sla_response_due_at": 1708786800,
"sla_resolution_due_at": 1708873200,
"ai_confidence": 0.94,
"ai_intent": "connectivity_issue",
"sentiment": "frustrated",
"created_at": 1708783200,
"updated_at": 1708790500,
"resolved_at": null,
"closed_at": null
}
Delete a ticket
This endpoint allows you to delete a ticket. Note: deleting a ticket is a permanent action and will remove all associated audit history, comments, and attachments. In most ITSM workflows, you should transition tickets to cancelled or closed status instead of deleting them.
Request
curl -X DELETE http://localhost:3000/v1/tickets/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
-H "Authorization: Bearer {token}"