Tickets
Tickets are the core of Support Station - they represent customer support requests and conversations. On this page, we will dive into the different ticket endpoints you can use to manage tickets programmatically. We will look at how to create, retrieve, update, and list tickets.
The ticket model
The ticket model contains all the information about a support ticket, including the subject, status, priority, customer information, and messages.
Properties
- Name
id- Type
- string
- Description
Unique identifier for the ticket (UUID).
- Name
ticket_number- Type
- integer
- Description
Human-readable ticket number, auto-incremented per organization.
- Name
subject- Type
- string
- Description
The ticket subject line (max 500 characters).
- Name
status- Type
- string
- Description
Current status:
OPEN,PENDING,ON_HOLD,RESOLVED, orCLOSED.
- Name
priority- Type
- string
- Description
Priority level:
LOW,MEDIUM,HIGH, orURGENT.
- Name
channel- Type
- string
- Description
How the ticket was created:
API,EMAIL,EMBED, orMANUAL.
- Name
customer- Type
- object
- Description
The customer who created the ticket.
- Name
assignee- Type
- object
- Description
The support agent assigned to the ticket (nullable).
- Name
team- Type
- object
- Description
The team assigned to handle the ticket (nullable).
- Name
tags- Type
- array
- Description
Array of tags applied to the ticket.
- Name
messages- Type
- array
- Description
Array of messages in the ticket conversation.
- 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
closed_at- Type
- timestamp
- Description
Timestamp of when the ticket was closed (nullable).
Create a ticket
Creates a new ticket with an initial message. If the customer does not exist, they will be created automatically based on the provided email.
Required scope: tickets:write
Required attributes
- Name
subject- Type
- string
- Description
The ticket subject (max 500 characters).
- Name
message- Type
- string
- Description
The initial message content from the customer.
- Name
customer- Type
- object
- Description
Customer information. Must include
email.
- Name
customer.email- Type
- string
- Description
Customer email address (required).
Optional attributes
- Name
priority- Type
- string
- Description
Priority level:
LOW,MEDIUM(default),HIGH, orURGENT.
- Name
tag_ids- Type
- string[]
- Description
Array of tag UUIDs to apply to the ticket.
- Name
customer.name- Type
- string
- Description
Customer display name.
- Name
customer.external_user_id- Type
- string
- Description
Your system user ID for this customer.
- Name
customer.external_organization_id- Type
- string
- Description
Your system organization/company ID.
- Name
customer.metadata- Type
- object
- Description
Arbitrary JSON metadata to store with the customer.
Request
curl -X POST https://api.supportstation.io/api/v1/tickets \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"subject": "Help with login",
"message": "I am unable to log into my account.",
"priority": "MEDIUM",
"customer": {
"email": "john@example.com",
"name": "John Doe"
}
}'
Response
{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"ticket_number": 42,
"subject": "Help with login",
"status": "OPEN",
"priority": "MEDIUM",
"channel": "API",
"customer": {
"id": "customer-uuid",
"email": "john@example.com",
"name": "John Doe"
},
"assignee": null,
"team": null,
"tags": [],
"messages": [
{
"id": "message-uuid",
"content": "I am unable to log into my account.",
"type": "INBOUND",
"created_at": "2025-01-15T10:30:00.000Z"
}
],
"created_at": "2025-01-15T10:30:00.000Z",
"updated_at": "2025-01-15T10:30:00.000Z",
"closed_at": null
}
}
List all tickets
Returns a paginated list of tickets in your organization.
Required scope: tickets:read
Query parameters
- Name
page- Type
- integer
- Description
Page number (default: 1).
- Name
limit- Type
- integer
- Description
Items per page, max 100 (default: 20).
- Name
status- Type
- string
- Description
Filter by status:
OPEN,PENDING,ON_HOLD,RESOLVED,CLOSED.
- Name
priority- Type
- string
- Description
Filter by priority:
LOW,MEDIUM,HIGH,URGENT.
- Name
customer_id- Type
- string
- Description
Filter by customer UUID.
- Name
assignee_id- Type
- string
- Description
Filter by assignee UUID.
- Name
tag_id- Type
- string
- Description
Filter by tag UUID.
- Name
search- Type
- string
- Description
Search in subject, customer email, or customer name.
Request
curl -G https://api.supportstation.io/api/v1/tickets \
-H "Authorization: Bearer {token}" \
-d status=OPEN \
-d limit=20
Response
{
"data": [
{
"id": "ticket-uuid",
"ticket_number": 42,
"subject": "Help with login",
"status": "OPEN",
"priority": "MEDIUM",
"channel": "API",
"customer": {
"id": "customer-uuid",
"email": "john@example.com",
"name": "John Doe"
},
"assignee": null,
"team": null,
"tags": [],
"message_count": 3,
"created_at": "2025-01-15T10:30:00.000Z",
"updated_at": "2025-01-15T12:00:00.000Z"
}
],
"meta": {
"pagination": {
"page": 1,
"limit": 20,
"total": 150,
"total_pages": 8
}
}
}
Retrieve a ticket
Returns a single ticket with all messages.
Required scope: tickets:read
Request
curl https://api.supportstation.io/api/v1/tickets/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer {token}"
Response
{
"data": {
"id": "ticket-uuid",
"ticket_number": 42,
"subject": "Help with login",
"status": "OPEN",
"priority": "MEDIUM",
"channel": "API",
"customer": {
"id": "customer-uuid",
"email": "john@example.com",
"name": "John Doe"
},
"assignee": {
"id": "user-uuid",
"name": "Support Agent",
"email": "agent@company.com"
},
"team": {
"id": "team-uuid",
"name": "Technical Support"
},
"tags": [
{
"id": "tag-uuid",
"name": "bug",
"color": "red"
}
],
"messages": [
{
"id": "message-uuid",
"content": "I am unable to log into my account.",
"type": "INBOUND",
"author": {
"type": "customer",
"id": "customer-uuid",
"email": "john@example.com",
"name": "John Doe"
},
"created_at": "2025-01-15T10:30:00.000Z"
}
],
"created_at": "2025-01-15T10:30:00.000Z",
"updated_at": "2025-01-15T11:00:00.000Z",
"closed_at": null
}
}
Add a message to a ticket
Adds a new message to an existing ticket. By default, messages are recorded as customer replies (INBOUND). To add a message as a support staff member, include the user_id parameter.
Required scope: tickets:write
Required attributes
- Name
content- Type
- string
- Description
The message content.
Optional attributes
- Name
user_id- Type
- string
- Description
UUID of the support staff member sending the message. If provided, the message will be recorded as an OUTBOUND (staff) reply. If omitted, the message is recorded as an INBOUND (customer) reply.
Customer message
curl -X POST https://api.supportstation.io/api/v1/tickets/550e8400-e29b-41d4-a716-446655440000/messages \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"content": "Thanks for the help! The issue is now resolved."
}'
Customer response
{
"data": {
"id": "message-uuid",
"content": "Thanks for the help! The issue is now resolved.",
"type": "INBOUND",
"author": {
"type": "customer",
"id": "customer-uuid",
"email": "john@example.com",
"name": "John Doe"
},
"created_at": "2025-01-15T14:00:00.000Z"
}
}
Staff message
curl -X POST https://api.supportstation.io/api/v1/tickets/550e8400-e29b-41d4-a716-446655440000/messages \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"content": "Hi John, I have looked into this and reset your account. Please try logging in again.",
"user_id": "user-uuid"
}'
Staff response
{
"data": {
"id": "message-uuid",
"content": "Hi John, I have looked into this and reset your account. Please try logging in again.",
"type": "OUTBOUND",
"author": {
"type": "user",
"id": "user-uuid",
"email": "agent@company.com",
"name": "Support Agent"
},
"created_at": "2025-01-15T14:30:00.000Z"
}
}
Update a ticket
Updates ticket properties like status, priority, assignee, or tags.
Required scope: tickets:write
Optional attributes
- Name
status- Type
- string
- Description
New status:
OPEN,PENDING,ON_HOLD,RESOLVED,CLOSED.
- Name
priority- Type
- string
- Description
New priority:
LOW,MEDIUM,HIGH,URGENT.
- Name
subject- Type
- string
- Description
Updated subject (max 500 characters).
- Name
assignee_id- Type
- string | null
- Description
User UUID to assign the ticket to, or
nullto unassign.
- Name
add_tag_ids- Type
- string[]
- Description
Array of tag UUIDs to add to the ticket.
- Name
remove_tag_ids- Type
- string[]
- Description
Array of tag UUIDs to remove from the ticket.
Request
curl -X PATCH https://api.supportstation.io/api/v1/tickets/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"status": "RESOLVED",
"priority": "LOW"
}'
Response
{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"ticket_number": 42,
"subject": "Help with login",
"status": "RESOLVED",
"priority": "LOW",
"channel": "API",
"customer": {
"id": "customer-uuid",
"email": "john@example.com",
"name": "John Doe"
},
"assignee": null,
"team": null,
"tags": [],
"created_at": "2025-01-15T10:30:00.000Z",
"updated_at": "2025-01-15T15:00:00.000Z",
"closed_at": null
}
}