Support Ticket Management API
The Support Ticket Management API allows you to manage customer support tickets in your TaskIP CRM system. You can create, read, update, and delete tickets, manage ticket assignments, handle attachments, and track ticket resolution workflow.
Endpoints Overview
Method | Endpoint | Description |
---|---|---|
GET | /api/public-v1/support-ticket | Get all support tickets |
POST | /api/public-v1/support-ticket | Create a new support ticket |
GET | /api/public-v1/support-ticket/{id} | Get a specific support ticket |
PUT | /api/public-v1/support-ticket/{id} | Update a support ticket |
DELETE | /api/public-v1/support-ticket/{id} | Delete a support ticket |
POST | /api/public-v1/support-ticket/bulk-actions | Perform bulk operations |
POST | /api/public-v1/support-ticket/reply/{uuid} | Reply to support ticket |
POST | /api/public-v1/support-ticket/{uuid}/priority | Update ticket priority |
POST | /api/public-v1/support-ticket/status-update/{uuid} | Update ticket status |
DELETE | /api/public-v1/support-ticket/{uuid}/note-delete/{id} | Delete ticket note |
POST | /api/public-v1/support-ticket/{uuid}/note-store | Add ticket note |
Get All Support Tickets
Retrieve a list of all support tickets in your system.
GET /api/public-v1/support-ticket
Request Headers
X-Secret-Key: your-secret-key-here
Content-Type: application/json
Query Parameters
Parameter | Type | Required | Description |
---|---|---|---|
page | integer | No | Page number for pagination (default: 1) |
limit | integer | No | Number of tickets per page (default: 50) |
search | string | No | Search term for ticket title or description |
sort | string | No | Sort field (created_at , updated_at , priority , status ) |
order | string | No | Sort order (asc or desc ) |
status | string | No | Filter by status (open , in_progress , resolved , closed ) |
priority | string | No | Filter by priority (low , medium , high , urgent ) |
assigned_to | integer | No | Filter by assigned team member ID |
client_id | integer | No | Filter by client ID |
category | string | No | Filter by ticket category |
date_from | string | No | Filter tickets from date (YYYY-MM-DD) |
date_to | string | No | Filter tickets to date (YYYY-MM-DD) |
Example Request
curl -X GET "https://public-api.taskip.net/api/public-v1/support-ticket?page=1&limit=20&status=open&priority=high" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json"
JavaScript Example
const response = await fetch('https://public-api.taskip.net/api/public-v1/support-ticket?page=1&limit=20', {
method: 'GET',
headers: {
'X-Secret-Key': 'your-secret-key-here',
'Content-Type': 'application/json'
}
});
const tickets = await response.json();
Example Response
{
"data": [
{
"id": 1,
"uuid": "550e8400-e29b-41d4-a716-446655440001",
"subject": "Login Issues with Dashboard",
"created_by": {
"id": 1,
"name": "Admin User",
"email": "admin@taskip.com"
},
"user": {
"id": 15,
"name": "John Smith",
"email": "john@acme.com"
},
"priority": 3,
"status": 1,
"description": "User cannot access dashboard after password reset",
"attachment": {
"id": 101,
"url": "https://cdn.taskip.net/attachments/ticket-attachment.pdf",
"name": "screenshot.pdf",
"size": 2048576
},
"createAt": "2 hours ago",
"date": "15-Jan-2024",
"time": "09:30AM"
},
{
"id": 2,
"uuid": "550e8400-e29b-41d4-a716-446655440002",
"subject": "Feature Request: Export Functionality",
"created_by": {
"id": 1,
"name": "Admin User",
"email": "admin@taskip.com"
},
"user": {
"id": 22,
"name": "Mike Wilson",
"email": "mike@techcorp.com"
},
"priority": 2,
"status": 2,
"description": "Request to add CSV export feature to reports",
"attachment": null,
"createAt": "1 day ago",
"date": "14-Jan-2024",
"time": "11:15AM"
}
],
"status": 200
}
Create a Support Ticket
Create a new support ticket in your system.
POST /api/public-v1/support-ticket
Request Headers
X-Secret-Key: your-secret-key-here
Content-Type: application/json
Request Body
Field | Type | Required | Description |
---|---|---|---|
subject | string | Yes | Ticket subject (max 191 characters) |
priority | integer | Yes | Priority level (0=Low, 1=Normal, 2=Medium, 3=High, 4=Urgent) |
status | integer | No | Status (0=Open, 1=In Progress, 2=Resolved, 3=Closed, 4=Pending) |
description | string | No | Detailed description of the issue |
attachment | integer | No | Attachment media ID |
created_by | integer | No | ID of user who created the ticket |
user_id | integer | No | ID of user associated with the ticket |
Example Request
curl -X POST "https://public-api.taskip.net/api/public-v1/support-ticket" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json" \
-d '{
"subject": "Email Notifications Not Working",
"priority": 3,
"status": 0,
"description": "Customer reports that email notifications for new orders are not being received. This started happening 2 days ago.",
"attachment": 101,
"created_by": 1,
"user_id": 18
}'
Python Example
import requests
headers = {
'X-Secret-Key': 'your-secret-key-here',
'Content-Type': 'application/json'
}
ticket_data = {
"subject": "Email Notifications Not Working",
"priority": 3,
"status": 0,
"description": "Customer reports that email notifications for new orders are not being received. This started happening 2 days ago.",
"attachment": 101,
"created_by": 1,
"user_id": 18
}
response = requests.post(
'https://public-api.taskip.net/api/public-v1/support-ticket',
headers=headers,
json=ticket_data
)
result = response.json()
Example Response
{
"data": {
"id": 46,
"uuid": "550e8400-e29b-41d4-a716-446655440046",
"subject": "Email Notifications Not Working",
"created_by": {
"id": 1,
"name": "Admin User",
"email": "admin@taskip.com"
},
"user": {
"id": 18,
"name": "Emma Davis",
"email": "emma@startup.com"
},
"priority": 3,
"status": 0,
"description": "Customer reports that email notifications for new orders are not being received. This started happening 2 days ago.",
"attachment": {
"id": 101,
"url": "https://cdn.taskip.net/attachments/ticket-attachment.pdf",
"name": "screenshot.pdf",
"size": 2048576
},
"createAt": "just now",
"date": "16-Jan-2024",
"time": "10:30AM"
},
"status": 201,
"msg": "SupportTicket stored successfully"
}
Get a Specific Support Ticket
Retrieve details of a specific support ticket by ID.
GET /api/public-v1/support-ticket/{id}
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
id | integer | Yes | Ticket ID |
Example Request
curl -X GET "https://public-api.taskip.net/api/public-v1/support-ticket/46" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json"
Example Response
{
"id": 46,
"uuid": "550e8400-e29b-41d4-a716-446655440046",
"subject": "Email Notifications Not Working",
"created_by": {
"id": 1,
"name": "Admin User",
"email": "admin@taskip.com"
},
"user": {
"id": 18,
"name": "Emma Davis",
"email": "emma@startup.com"
},
"priority": 3,
"status": 1,
"description": "Customer reports that email notifications for new orders are not being received. This started happening 2 days ago.",
"attachment": {
"id": 101,
"url": "https://cdn.taskip.net/attachments/ticket-attachment.pdf",
"name": "error_logs.txt",
"size": 15420
},
"createAt": "3 hours ago",
"date": "16-Jan-2024",
"time": "10:30AM"
}
Update a Support Ticket
Update an existing support ticket's information.
PUT /api/public-v1/support-ticket/{id}
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
id | integer | Yes | Ticket ID to update |
Request Body
Same fields as create ticket. All fields are optional - only include fields you want to update.
Example Request
curl -X PUT "https://public-api.taskip.net/api/public-v1/support-ticket/46" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json" \
-d '{
"subject": "Email Notifications Not Working - URGENT",
"priority": 4,
"status": 1,
"description": "Customer reports critical email notification failures affecting order processing"
}'
Example Response
{
"data": {
"id": 46,
"uuid": "550e8400-e29b-41d4-a716-446655440046",
"subject": "Email Notifications Not Working - URGENT",
"created_by": {
"id": 1,
"name": "Admin User",
"email": "admin@taskip.com"
},
"user": {
"id": 18,
"name": "Emma Davis",
"email": "emma@startup.com"
},
"priority": 4,
"status": 1,
"description": "Customer reports critical email notification failures affecting order processing",
"attachment": {
"id": 101,
"url": "https://cdn.taskip.net/attachments/ticket-attachment.pdf",
"name": "error_logs.txt",
"size": 15420
},
"createAt": "3 hours ago",
"date": "16-Jan-2024",
"time": "10:30AM"
},
"status": 201,
"msg": "SupportTicket stored successfully"
}
Delete a Support Ticket
Delete a specific support ticket from your system.
DELETE /api/public-v1/support-ticket/{id}
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
id | integer | Yes | Ticket ID to delete |
Warning: Deleting a support ticket will permanently remove it and all associated replies, attachments, and activity history. This action cannot be undone.
Example Request
curl -X DELETE "https://public-api.taskip.net/api/public-v1/support-ticket/46" \
-H "X-Secret-Key: your-secret-key-here"
Example Response
{
"msg": "SupportTicket deleted successfully",
"status": 200
}
Assign Ticket to Team Member
Assign or reassign a support ticket to a team member.
POST /api/public-v1/ticket/{id}/assign
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
id | integer | Yes | Ticket ID to assign |
Request Body
Field | Type | Required | Description |
---|---|---|---|
assigned_to | integer | Yes | Team member ID to assign the ticket |
reason | string | No | Reason for assignment/reassignment |
notify_assignee | boolean | No | Send notification to assignee (default: true) |
Example Request
curl -X POST "https://public-api.taskip.net/api/public-v1/ticket/45/assign" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json" \
-d '{
"assigned_to": 8,
"reason": "Reassigning to specialist for email server issues",
"notify_assignee": true
}'
Example Response
{
"success": true,
"message": "Ticket assigned successfully",
"data": {
"ticket_id": 45,
"previous_assignee": "Sarah Johnson",
"new_assignee": "David Chen",
"assigned_at": "2024-01-16T16:00:00Z",
"reason": "Reassigning to specialist for email server issues"
}
}
Update Ticket Status
Update the status of a support ticket.
POST /api/public-v1/ticket/{id}/status-update
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
id | integer | Yes | Ticket ID |
Request Body
Field | Type | Required | Description |
---|---|---|---|
status | string | Yes | New status (open , in_progress , resolved , closed ) |
resolution_notes | string | No | Resolution notes (required for resolved status) |
notify_client | boolean | No | Send status update notification to client |
Example Request
curl -X POST "https://public-api.taskip.net/api/public-v1/ticket/45/status-update" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json" \
-d '{
"status": "resolved",
"resolution_notes": "Email notification system has been fixed. All services are now working properly.",
"notify_client": true
}'
Example Response
{
"success": true,
"message": "Ticket status updated successfully",
"data": {
"ticket_id": 45,
"old_status": "in_progress",
"new_status": "resolved",
"resolution_notes": "Email notification system has been fixed. All services are now working properly.",
"actual_resolution_time": "2024-01-16T18:30:00Z",
"updated_at": "2024-01-16T18:30:00Z"
}
}
Add Reply to Ticket
Add a reply/comment to a support ticket.
POST /api/public-v1/ticket/{id}/add-reply
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
id | integer | Yes | Ticket ID |
Request Body
Field | Type | Required | Description |
---|---|---|---|
message | string | Yes | Reply message content |
author_type | string | No | Author type (team_member , client , system ) |
is_private | boolean | No | Private reply (not visible to client) |
notify_client | boolean | No | Send notification to client |
Example Request
curl -X POST "https://public-api.taskip.net/api/public-v1/ticket/45/add-reply" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json" \
-d '{
"message": "The issue has been resolved. Please test the email notifications and let us know if you encounter any further problems.",
"author_type": "team_member",
"is_private": false,
"notify_client": true
}'
JavaScript Example
const replyData = {
message: "The issue has been resolved. Please test the email notifications and let us know if you encounter any further problems.",
author_type: "team_member",
is_private: false,
notify_client: true
};
const response = await fetch('https://public-api.taskip.net/api/public-v1/ticket/45/add-reply', {
method: 'POST',
headers: {
'X-Secret-Key': 'your-secret-key-here',
'Content-Type': 'application/json'
},
body: JSON.stringify(replyData)
});
const result = await response.json();
Example Response
{
"success": true,
"message": "Reply added successfully",
"data": {
"reply_id": 103,
"ticket_id": 45,
"message": "The issue has been resolved. Please test the email notifications and let us know if you encounter any further problems.",
"author": "Sarah Johnson",
"author_type": "team_member",
"is_private": false,
"created_at": "2024-01-16T18:35:00Z"
}
}
Upload Ticket Attachments
Upload files/attachments to a support ticket.
POST /api/public-v1/ticket/{id}/attachments
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
id | integer | Yes | Ticket ID |
Request Body (multipart/form-data)
Field | Type | Required | Description |
---|---|---|---|
files[] | file | Yes | Files to upload (multiple files supported) |
description | string | No | Description of the attachments |
Example Request
curl -X POST "https://public-api.taskip.net/api/public-v1/ticket/45/attachments" \
-H "X-Secret-Key: your-secret-key-here" \
-F "files[]=@screenshot.png" \
-F "files[]=@error_log.txt" \
-F "description=Screenshots and error logs showing the resolved issue"
Example Response
{
"success": true,
"message": "Attachments uploaded successfully",
"data": {
"ticket_id": 45,
"uploaded_files": [
{
"id": 26,
"filename": "screenshot.png",
"original_filename": "screenshot.png",
"file_size": 245760,
"mime_type": "image/png",
"uploaded_at": "2024-01-16T19:00:00Z"
},
{
"id": 27,
"filename": "error_log.txt",
"original_filename": "error_log.txt",
"file_size": 8192,
"mime_type": "text/plain",
"uploaded_at": "2024-01-16T19:00:00Z"
}
]
}
}
Get Ticket Attachments
Retrieve all attachments for a specific ticket.
GET /api/public-v1/ticket/{id}/attachments
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
id | integer | Yes | Ticket ID |
Example Request
curl -X GET "https://public-api.taskip.net/api/public-v1/ticket/45/attachments" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json"
Example Response
{
"success": true,
"data": {
"ticket_id": 45,
"attachments": [
{
"id": 25,
"filename": "error_logs.txt",
"original_filename": "error_logs.txt",
"file_size": 15420,
"mime_type": "text/plain",
"download_url": "https://public-api.taskip.net/api/public-v1/ticket/45/attachments/25/download",
"uploaded_by": "Emma Davis",
"uploaded_at": "2024-01-16T10:35:00Z"
},
{
"id": 26,
"filename": "screenshot.png",
"original_filename": "screenshot.png",
"file_size": 245760,
"mime_type": "image/png",
"download_url": "https://public-api.taskip.net/api/public-v1/ticket/45/attachments/26/download",
"uploaded_by": "Sarah Johnson",
"uploaded_at": "2024-01-16T19:00:00Z"
}
],
"total_attachments": 2,
"total_size": 261180
}
}
Bulk Actions
Perform bulk operations on multiple support tickets.
POST /api/public-v1/support-ticket/bulk-actions
Request Body
Field | Type | Required | Description |
---|---|---|---|
ticket_ids | array | Yes | Array of ticket IDs |
action | string | Yes | Action to perform (delete , status_update , assign , add_tags ) |
parameters | object | No | Additional parameters for the action |
Action-specific Parameters
For status_update
action:
status
: New status for all ticketsresolution_notes
: Resolution notes (for resolved status)
For assign
action:
assigned_to
: Team member ID to assign tickets to
For add_tags
action:
tags
: Array of tags to add to tickets
Example Request
curl -X POST "https://public-api.taskip.net/api/public-v1/support-ticket/bulk-actions" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json" \
-d '{
"ticket_ids": [40, 41, 42, 43],
"action": "delete"
}'
Example Response
{
"msg": "SupportTicket deleted successfully"
}
Get Ticket Analytics
Retrieve analytics and statistics for support tickets.
GET /api/public-v1/ticket/analytics
Query Parameters
Parameter | Type | Required | Description |
---|---|---|---|
period | string | No | Time period (day , week , month , year ) |
start_date | string | No | Start date for analysis (YYYY-MM-DD) |
end_date | string | No | End date for analysis (YYYY-MM-DD) |
group_by | string | No | Group results by (status , priority , category , assignee ) |
Example Request
curl -X GET "https://public-api.taskip.net/api/public-v1/ticket/analytics?period=month&group_by=status" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json"
Example Response
{
"success": true,
"data": {
"period": "month",
"start_date": "2024-01-01",
"end_date": "2024-01-31",
"summary": {
"total_tickets": 125,
"new_tickets": 45,
"resolved_tickets": 38,
"closed_tickets": 35,
"average_resolution_time": "2.3 days",
"customer_satisfaction": 4.2
},
"by_status": {
"open": 25,
"in_progress": 18,
"resolved": 38,
"closed": 44
},
"by_priority": {
"low": 30,
"medium": 55,
"high": 25,
"urgent": 15
},
"by_category": {
"Technical Support": 45,
"Feature Request": 20,
"Bug Report": 35,
"General Inquiry": 25
},
"resolution_time_trend": [
{
"week": "2024-W01",
"average_hours": 48
},
{
"week": "2024-W02",
"average_hours": 36
},
{
"week": "2024-W03",
"average_hours": 42
},
{
"week": "2024-W04",
"average_hours": 38
}
],
"top_assignees": [
{
"assignee": "Sarah Johnson",
"tickets_handled": 28,
"average_resolution_time": "1.8 days"
},
{
"assignee": "David Chen",
"tickets_handled": 22,
"average_resolution_time": "2.1 days"
}
]
}
}
Error Responses
Common Error Codes
Status Code | Error Type | Description |
---|---|---|
400 | Bad Request | Invalid request data or missing required fields |
401 | Unauthorized | Invalid or missing X-Secret-Key |
404 | Not Found | Ticket not found |
409 | Conflict | Ticket cannot be modified in current status |
413 | Payload Too Large | Attachment file size exceeds limit |
422 | Validation Error | Request data failed validation |
429 | Too Many Requests | Rate limit exceeded |
Example Error Response
{
"success": false,
"error": "Validation Error",
"message": "The given data was invalid",
"errors": {
"title": ["The title field is required."],
"client_id": ["The selected client id is invalid."],
"category": ["The category field is required."]
},
"status_code": 422
}
Response Schemas
Support Ticket Object
{
"id": "integer",
"ticket_number": "string",
"title": "string",
"description": "string",
"client_id": "integer",
"client_name": "string",
"client_email": "string",
"category": "string",
"priority": "string",
"status": "string",
"assigned_to": "integer|null",
"assigned_to_name": "string|null",
"created_by": "string",
"resolution_notes": "string|null",
"estimated_resolution_time": "string (ISO 8601)|null",
"actual_resolution_time": "string (ISO 8601)|null",
"tags": "array",
"custom_fields": "object|null",
"reply_count": "integer",
"attachment_count": "integer",
"created_at": "string (ISO 8601)",
"updated_at": "string (ISO 8601)"
}
Reply Object
{
"id": "integer",
"message": "string",
"author": "string",
"author_type": "string",
"is_private": "boolean",
"created_at": "string (ISO 8601)"
}
Attachment Object
{
"id": "integer",
"filename": "string",
"original_filename": "string",
"file_size": "integer",
"mime_type": "string",
"download_url": "string",
"uploaded_by": "string",
"uploaded_at": "string (ISO 8601)"
}
Best Practices
Ticket Management
- Clear titles: Use descriptive, specific titles for easy identification
- Detailed descriptions: Include all relevant information in the initial description
- Proper categorization: Use consistent categories for better organization
- Priority assignment: Set appropriate priorities based on business impact
Workflow Optimization
- Quick assignment: Assign tickets to appropriate team members promptly
- Regular updates: Keep clients informed with regular status updates
- Resolution tracking: Document resolution steps for future reference
- Follow-up: Ensure client satisfaction after ticket resolution
Communication
- Professional replies: Maintain professional tone in all communications
- Timely responses: Respond to tickets within defined SLA timeframes
- Client notifications: Keep clients informed of important updates
- Internal notes: Use private replies for internal team coordination
Tip: Use the analytics endpoint to identify trends in ticket volume, resolution times, and common issues. This data can help optimize your support processes and resource allocation.
Reply to Support Ticket
Add a reply to an existing support ticket.
POST /api/public-v1/support-ticket/reply/{uuid}
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
uuid | string | Yes | Support ticket UUID |
Request Body
Field | Type | Required | Description |
---|---|---|---|
status | integer | No | Status update (0=Open, 1=In Progress, 2=Resolved, 3=Closed, 4=Pending) |
description | string | Yes | Reply message content |
attachment | integer | No | Attachment media ID |
Example Request
curl -X POST "https://public-api.taskip.net/api/public-v1/support-ticket/reply/abc123def456" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json" \
-d '{
"status": 1,
"description": "Thank you for contacting us. We have reviewed your issue and will provide a solution shortly.",
"attachment": 123
}'
Example Response
{
"msg": "Reply added successfully",
"status": 201,
"reply": {
"id": 789,
"user": {
"id": 5,
"name": "Support Agent",
"email": "agent@company.com"
},
"description": "Thank you for contacting us. We have reviewed your issue and will provide a solution shortly.",
"attachment": {
"id": 123,
"url": "https://cdn.taskip.net/attachments/solution_guide.pdf",
"name": "solution_guide.pdf",
"size": 245760
},
"createAt": "just now",
"date": "26-Jan-2024",
"time": "03:30PM"
}
}
Response Fields
Field | Type | Description |
---|---|---|
reply_id | integer | Unique reply ID |
ticket_uuid | string | Parent ticket UUID |
message | string | Reply message content |
is_internal | boolean | Whether reply is internal only |
author | object | Reply author information |
attachments | array | Attached files information |
created_at | string | Reply creation timestamp |
client_notified | boolean | Whether client was notified via email |