Support Ticket Management

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

MethodEndpointDescription
GET/api/public-v1/support-ticketGet all support tickets
POST/api/public-v1/support-ticketCreate 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-actionsPerform bulk operations
POST/api/public-v1/support-ticket/reply/{uuid}Reply to support ticket
POST/api/public-v1/support-ticket/{uuid}/priorityUpdate 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-storeAdd 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

ParameterTypeRequiredDescription
pageintegerNoPage number for pagination (default: 1)
limitintegerNoNumber of tickets per page (default: 50)
searchstringNoSearch term for ticket title or description
sortstringNoSort field (created_at, updated_at, priority, status)
orderstringNoSort order (asc or desc)
statusstringNoFilter by status (open, in_progress, resolved, closed)
prioritystringNoFilter by priority (low, medium, high, urgent)
assigned_tointegerNoFilter by assigned team member ID
client_idintegerNoFilter by client ID
categorystringNoFilter by ticket category
date_fromstringNoFilter tickets from date (YYYY-MM-DD)
date_tostringNoFilter 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

FieldTypeRequiredDescription
subjectstringYesTicket subject (max 191 characters)
priorityintegerYesPriority level (0=Low, 1=Normal, 2=Medium, 3=High, 4=Urgent)
statusintegerNoStatus (0=Open, 1=In Progress, 2=Resolved, 3=Closed, 4=Pending)
descriptionstringNoDetailed description of the issue
attachmentintegerNoAttachment media ID
created_byintegerNoID of user who created the ticket
user_idintegerNoID 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

ParameterTypeRequiredDescription
idintegerYesTicket 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

ParameterTypeRequiredDescription
idintegerYesTicket 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

ParameterTypeRequiredDescription
idintegerYesTicket 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

ParameterTypeRequiredDescription
idintegerYesTicket ID to assign

Request Body

FieldTypeRequiredDescription
assigned_tointegerYesTeam member ID to assign the ticket
reasonstringNoReason for assignment/reassignment
notify_assigneebooleanNoSend 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

ParameterTypeRequiredDescription
idintegerYesTicket ID

Request Body

FieldTypeRequiredDescription
statusstringYesNew status (open, in_progress, resolved, closed)
resolution_notesstringNoResolution notes (required for resolved status)
notify_clientbooleanNoSend 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

ParameterTypeRequiredDescription
idintegerYesTicket ID

Request Body

FieldTypeRequiredDescription
messagestringYesReply message content
author_typestringNoAuthor type (team_member, client, system)
is_privatebooleanNoPrivate reply (not visible to client)
notify_clientbooleanNoSend 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

ParameterTypeRequiredDescription
idintegerYesTicket ID

Request Body (multipart/form-data)

FieldTypeRequiredDescription
files[]fileYesFiles to upload (multiple files supported)
descriptionstringNoDescription 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

ParameterTypeRequiredDescription
idintegerYesTicket 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

FieldTypeRequiredDescription
ticket_idsarrayYesArray of ticket IDs
actionstringYesAction to perform (delete, status_update, assign, add_tags)
parametersobjectNoAdditional parameters for the action

Action-specific Parameters

For status_update action:

  • status: New status for all tickets
  • resolution_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

ParameterTypeRequiredDescription
periodstringNoTime period (day, week, month, year)
start_datestringNoStart date for analysis (YYYY-MM-DD)
end_datestringNoEnd date for analysis (YYYY-MM-DD)
group_bystringNoGroup 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 CodeError TypeDescription
400Bad RequestInvalid request data or missing required fields
401UnauthorizedInvalid or missing X-Secret-Key
404Not FoundTicket not found
409ConflictTicket cannot be modified in current status
413Payload Too LargeAttachment file size exceeds limit
422Validation ErrorRequest data failed validation
429Too Many RequestsRate 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

  1. Clear titles: Use descriptive, specific titles for easy identification
  2. Detailed descriptions: Include all relevant information in the initial description
  3. Proper categorization: Use consistent categories for better organization
  4. Priority assignment: Set appropriate priorities based on business impact

Workflow Optimization

  1. Quick assignment: Assign tickets to appropriate team members promptly
  2. Regular updates: Keep clients informed with regular status updates
  3. Resolution tracking: Document resolution steps for future reference
  4. Follow-up: Ensure client satisfaction after ticket resolution

Communication

  1. Professional replies: Maintain professional tone in all communications
  2. Timely responses: Respond to tickets within defined SLA timeframes
  3. Client notifications: Keep clients informed of important updates
  4. 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

ParameterTypeRequiredDescription
uuidstringYesSupport ticket UUID

Request Body

FieldTypeRequiredDescription
statusintegerNoStatus update (0=Open, 1=In Progress, 2=Resolved, 3=Closed, 4=Pending)
descriptionstringYesReply message content
attachmentintegerNoAttachment 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

FieldTypeDescription
reply_idintegerUnique reply ID
ticket_uuidstringParent ticket UUID
messagestringReply message content
is_internalbooleanWhether reply is internal only
authorobjectReply author information
attachmentsarrayAttached files information
created_atstringReply creation timestamp
client_notifiedbooleanWhether client was notified via email