Tickets endpoints (Admin API)
32 FeatherPanel Admin API endpoints from admin/tickets.php: methods, paths, auth, permissions, rate limits, parameters and responses.
Last synced from FeatherPanel 15b94e9 on .
On this page
Defined in backend/app/routes/admin/tickets.php. Authentication used here: Admin. Read Authentication for how to send credentials and Rate limits and errors for the response envelope.
Paths, methods, permissions and rate limits come from the route file. Summaries, parameters and response codes come from the OpenAPI annotations on the controllers; endpoints without annotations show only what the route file declares.
Endpoints
GET/api/admin/tickets
Get all tickets Retrieve a paginated list of all tickets with optional filters and search functionality.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
page | query | integer | no | Page number for pagination |
limit | query | integer | no | Number of records per page |
search | query | string | no | Search term to filter tickets by title or description |
user_uuid | query | string (uuid) | no | Filter by user UUID |
server_id | query | integer | no | Filter by server ID |
category_id | query | integer | no | Filter by category ID |
status_id | query | integer | no | Filter by status ID |
Response data field | Type | Description |
|---|---|---|
tickets | Ticket[] | |
pagination | TicketPagination | |
search | object |
curl -X GET "$PANEL_URL/api/admin/tickets" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Tickets retrieved successfully · 401 Unauthorized · 403 Forbidden - Insufficient permissions
PUT/api/admin/tickets
Create new ticket Create a new ticket. Admins can create tickets on behalf of users.
Request body: TicketCreate (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
user_uuid | string (uuid) | yes | User UUID who is creating the ticket |
server_id | integer | no | Server ID if ticket is related to a server |
category_id | integer | yes | Category ID |
priority_id | integer | yes | Priority ID |
status_id | integer | yes | Status ID |
title | string | yes | Ticket title |
description | string | yes | Ticket description |
Response data field | Type | Description |
|---|---|---|
ticket_id | integer | Created ticket ID |
ticket_uuid | string (uuid) | Created ticket UUID |
curl -X PUT "$PANEL_URL/api/admin/tickets" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"user_uuid":"","server_id":0,"category_id":0,"priority_id":0,"status_id":0,"title":"","description":""}'Plugin events: featherpanel:ticket:created
Responses: 201 Ticket created successfully · 400 Bad request - Validation errors · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 500 Internal server error
POST/api/admin/tickets/categories/upload-icon
Upload icon for ticket category Upload an icon image file for ticket categories. Supports JPG, PNG, GIF, and WebP formats with a maximum size of 5MB.
| Body field | Type | Required | Description |
|---|---|---|---|
icon | string (binary) | yes | Icon image file (JPG, PNG, GIF, WebP, max 5MB) |
Response data field | Type | Description |
|---|---|---|
url | string | Public URL of the uploaded icon |
filename | string | Filename of the uploaded icon |
curl -X POST "$PANEL_URL/api/admin/tickets/categories/upload-icon" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-F "icon=@./file"Responses: 201 Icon uploaded successfully · 400 Bad request - No file provided, invalid file type, or file too large · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 500 Internal server error - Failed to save file
GET/api/admin/tickets/categories
Get all ticket categories Retrieve a paginated list of all ticket categories with optional search functionality.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
page | query | integer | no | Page number for pagination |
limit | query | integer | no | Number of records per page |
search | query | string | no | Search term to filter categories |
Response data field | Type | Description |
|---|---|---|
categories | TicketCategory[] | |
pagination | TicketCategoryPagination | |
search | object |
curl -X GET "$PANEL_URL/api/admin/tickets/categories" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Categories retrieved successfully · 401 Unauthorized · 403 Forbidden - Insufficient permissions
GET/api/admin/tickets/categories/{id}
Get ticket category by ID Retrieve a specific ticket category by its ID.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Category ID |
Response data field | Type | Description |
|---|---|---|
category | TicketCategory |
curl -X GET "$PANEL_URL/api/admin/tickets/categories/$ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Category retrieved successfully · 400 Bad request - Invalid ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Category not found
PUT/api/admin/tickets/categories
Create new ticket category Create a new ticket category with comprehensive validation.
Request body: TicketCategoryCreate (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
name | string | yes | Category name |
icon | string | no | Category icon |
color | string | no | Category color |
support_email | string | no | Support email for this category |
open_hours | string | no | Open hours |
description | string | no | Category description |
Response data field | Type | Description |
|---|---|---|
category_id | integer | Created category ID |
curl -X PUT "$PANEL_URL/api/admin/tickets/categories" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"name":"","icon":"","color":"","support_email":"","open_hours":"","description":""}'Plugin events: featherpanel:ticket:category:created
Responses: 201 Category created successfully · 400 Bad request - Validation errors · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 500 Internal server error
PATCH/api/admin/tickets/categories/{id}
Update ticket category Update an existing ticket category with comprehensive validation.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Category ID |
Request body: TicketCategoryUpdate (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
name | string | no | Category name |
icon | string | no | Category icon |
color | string | no | Category color |
support_email | string | no | Support email for this category |
open_hours | string | no | Open hours |
description | string | no | Category description |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
curl -X PATCH "$PANEL_URL/api/admin/tickets/categories/$ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"name":"","icon":"","color":"","support_email":"","open_hours":"","description":""}'Plugin events: featherpanel:ticket:category:updated
Responses: 200 Category updated successfully · 400 Bad request - Validation errors · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Category not found · 500 Internal server error
DELETE/api/admin/tickets/categories/{id}
Delete ticket category Permanently delete a ticket category.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Category ID |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
curl -X DELETE "$PANEL_URL/api/admin/tickets/categories/$ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Plugin events: featherpanel:ticket:category:deleted
Responses: 200 Category deleted successfully · 400 Bad request - Invalid ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Category not found · 409 Conflict - Cannot delete (tickets exist) · 500 Internal server error
GET/api/admin/tickets/priorities
Get all ticket priorities Retrieve a paginated list of all ticket priorities with optional search functionality.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
page | query | integer | no | Page number for pagination |
limit | query | integer | no | Number of records per page |
search | query | string | no | Search term to filter priorities |
Response data field | Type | Description |
|---|---|---|
priorities | TicketPriority[] | |
pagination | TicketPriorityPagination | |
search | object |
curl -X GET "$PANEL_URL/api/admin/tickets/priorities" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Priorities retrieved successfully · 401 Unauthorized · 403 Forbidden - Insufficient permissions
GET/api/admin/tickets/priorities/{id}
Get ticket priority by ID Retrieve a specific ticket priority by its ID.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Priority ID |
Response data field | Type | Description |
|---|---|---|
priority | TicketPriority |
curl -X GET "$PANEL_URL/api/admin/tickets/priorities/$ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Priority retrieved successfully · 400 Bad request - Invalid ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Priority not found
PUT/api/admin/tickets/priorities
Create new ticket priority Create a new ticket priority.
Request body: TicketPriorityCreate (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
name | string | yes | Priority name |
color | string | no | Priority color |
sort_order | integer | no | Display order (lower appears first) |
Response data field | Type | Description |
|---|---|---|
priority_id | integer | Created priority ID |
curl -X PUT "$PANEL_URL/api/admin/tickets/priorities" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"name":"","color":"","sort_order":0}'Plugin events: featherpanel:ticket:priority:created
Responses: 201 Priority created successfully · 400 Bad request - Validation errors · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 500 Internal server error
PATCH/api/admin/tickets/priorities/{id}
Update ticket priority Update an existing ticket priority.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Priority ID |
Request body: TicketPriorityUpdate (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
name | string | no | Priority name |
color | string | no | Priority color |
sort_order | integer | no | Display order (lower appears first) |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
curl -X PATCH "$PANEL_URL/api/admin/tickets/priorities/$ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"name":"","color":"","sort_order":0}'Plugin events: featherpanel:ticket:priority:updated
Responses: 200 Priority updated successfully · 400 Bad request - Validation errors · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Priority not found · 500 Internal server error
DELETE/api/admin/tickets/priorities/{id}
Delete ticket priority Permanently delete a ticket priority.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Priority ID |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
curl -X DELETE "$PANEL_URL/api/admin/tickets/priorities/$ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Plugin events: featherpanel:ticket:priority:deleted
Responses: 200 Priority deleted successfully · 400 Bad request - Invalid ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Priority not found · 500 Internal server error
GET/api/admin/tickets/statuses
Get all ticket statuses Retrieve a paginated list of all ticket statuses with optional search functionality.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
page | query | integer | no | Page number for pagination |
limit | query | integer | no | Number of records per page |
search | query | string | no | Search term to filter statuses |
Response data field | Type | Description |
|---|---|---|
statuses | TicketStatus[] | |
pagination | TicketStatusPagination | |
search | object |
curl -X GET "$PANEL_URL/api/admin/tickets/statuses" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Statuses retrieved successfully · 401 Unauthorized · 403 Forbidden - Insufficient permissions
GET/api/admin/tickets/statuses/{id}
Get ticket status by ID Retrieve a specific ticket status by its ID.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Status ID |
Response data field | Type | Description |
|---|---|---|
status | TicketStatus |
curl -X GET "$PANEL_URL/api/admin/tickets/statuses/$ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Status retrieved successfully · 400 Bad request - Invalid ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Status not found
PUT/api/admin/tickets/statuses
Create new ticket status Create a new ticket status.
Request body: TicketStatusCreate (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
name | string | yes | Status name |
color | string | no | Status color |
sort_order | integer | no | Display order (lower appears first) |
is_default | boolean | no | Assign this status to newly created tickets |
Response data field | Type | Description |
|---|---|---|
status_id | integer | Created status ID |
curl -X PUT "$PANEL_URL/api/admin/tickets/statuses" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"name":"","color":"","sort_order":0,"is_default":false}'Plugin events: featherpanel:ticket:status:created
Responses: 201 Status created successfully · 400 Bad request - Validation errors · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 500 Internal server error
PATCH/api/admin/tickets/statuses/{id}
Update ticket status Update an existing ticket status.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Status ID |
Request body: TicketStatusUpdate (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
name | string | no | Status name |
color | string | no | Status color |
sort_order | integer | no | Display order (lower appears first) |
is_default | boolean | no | Assign this status to newly created tickets |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
curl -X PATCH "$PANEL_URL/api/admin/tickets/statuses/$ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"name":"","color":"","sort_order":0,"is_default":false}'Plugin events: featherpanel:ticket:status:updated
Responses: 200 Status updated successfully · 400 Bad request - Validation errors · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Status not found · 500 Internal server error
DELETE/api/admin/tickets/statuses/{id}
Delete ticket status Permanently delete a ticket status.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id | path | integer | yes | Status ID |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
curl -X DELETE "$PANEL_URL/api/admin/tickets/statuses/$ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Plugin events: featherpanel:ticket:status:deleted
Responses: 200 Status deleted successfully · 400 Bad request - Invalid ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Status not found · 500 Internal server error
GET/api/admin/tickets/{uuid}/messages
Get all messages for a ticket Retrieve all messages for a specific ticket by UUID.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuid | path | string (uuid) | yes | Ticket UUID |
Response data field | Type | Description |
|---|---|---|
messages | TicketMessage[] |
curl -X GET "$PANEL_URL/api/admin/tickets/$UUID/messages" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Messages retrieved successfully · 400 Bad request - Invalid UUID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Ticket not found
GET/api/admin/tickets/{uuid}/messages/{id}
Get ticket message by ID Retrieve a specific message from a ticket.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuid | path | string (uuid) | yes | Ticket UUID |
id | path | integer | yes | Message ID |
Response data field | Type | Description |
|---|---|---|
message | TicketMessage |
curl -X GET "$PANEL_URL/api/admin/tickets/$UUID/messages/$ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Message retrieved successfully · 400 Bad request - Invalid UUID or ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Ticket or message not found
POST/api/admin/tickets/{uuid}/messages
Create new message for ticket Add a new message/reply to a ticket. Support staff can add internal notes.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuid | path | string (uuid) | yes | Ticket UUID |
Request body: TicketMessageCreate (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
message | string | yes | Message content |
is_internal | boolean | no | Whether this is an internal note (staff only) |
Response data field | Type | Description |
|---|---|---|
message_id | integer | Created message ID |
curl -X POST "$PANEL_URL/api/admin/tickets/$UUID/messages" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"message":"","is_internal":false}'Plugin events: featherpanel:ticket:message:created
Responses: 201 Message created successfully · 400 Bad request - Validation errors · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Ticket not found · 500 Internal server error
PATCH/api/admin/tickets/{uuid}/messages/{id}
Update ticket message Update an existing message in a ticket.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuid | path | string (uuid) | yes | Ticket UUID |
id | path | integer | yes | Message ID |
Request body: TicketMessageUpdate (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
message | string | no | Message content |
is_internal | boolean | no | Whether this is an internal note (staff only) |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
curl -X PATCH "$PANEL_URL/api/admin/tickets/$UUID/messages/$ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"message":"","is_internal":false}'Plugin events: featherpanel:ticket:message:updated
Responses: 200 Message updated successfully · 400 Bad request - Validation errors · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Ticket or message not found · 500 Internal server error
DELETE/api/admin/tickets/{uuid}/messages/{id}
Delete ticket message Permanently delete a message from a ticket.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuid | path | string (uuid) | yes | Ticket UUID |
id | path | integer | yes | Message ID |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
curl -X DELETE "$PANEL_URL/api/admin/tickets/$UUID/messages/$ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Plugin events: featherpanel:ticket:message:deleted
Responses: 200 Message deleted successfully · 400 Bad request - Invalid UUID or ID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Ticket or message not found · 500 Internal server error
POST/api/admin/tickets/{uuid}/attachments
Upload attachment for ticket Upload an attachment file for a ticket. Supports various file types with a maximum size of 50MB. Files are stored under /attachments using the pattern <ticketUuid>_tk_<name>.<extension>.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuid | path | string | yes | Ticket UUID |
| Body field | Type | Required | Description |
|---|---|---|---|
file | string (binary) | yes | Attachment file (max 50MB) |
Response data field | Type | Description |
|---|---|---|
attachment_id | integer | Attachment ID |
url | string | Public URL of the attachment |
filename | string | Stored filename |
curl -X POST "$PANEL_URL/api/admin/tickets/$UUID/attachments" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-F "file=@./file"Plugin events: featherpanel:ticket:attachment:created
Responses: 201 Attachment uploaded successfully · 400 Bad request - No file provided or invalid file · 401 Unauthorized · 403 Forbidden - Attachments disabled · 404 Ticket not found · 500 Internal server error - Failed to save file
GET/api/admin/tickets/{uuid}/attachments
Get attachments for ticket Retrieve all attachments associated with a ticket.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuid | path | string | yes | Ticket UUID |
Response data field | Type | Description |
|---|---|---|
attachments | TicketAttachment[] |
curl -X GET "$PANEL_URL/api/admin/tickets/$UUID/attachments" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Attachments retrieved successfully · 400 Bad request - Invalid UUID · 401 Unauthorized · 403 Forbidden · 404 Ticket not found
DELETE/api/admin/tickets/{uuid}/attachments/{attachmentId}
Delete ticket attachment Delete a specific attachment associated with a ticket.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuid | path | string | yes | Ticket UUID |
attachmentId | path | integer | yes | Attachment ID |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
curl -X DELETE "$PANEL_URL/api/admin/tickets/$UUID/attachments/$ATTACHMENT_ID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Plugin events: featherpanel:ticket:attachment:deleted
Responses: 200 Attachment deleted successfully · 400 Bad request - Invalid parameters · 401 Unauthorized · 403 Forbidden · 404 Ticket or attachment not found · 500 Internal server error
POST/api/admin/tickets/{uuid}/reply
Reply to ticket Add a reply/message to a ticket. Support staff can add internal notes.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuid | path | string (uuid) | yes | Ticket UUID |
Request body: TicketReply (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
message | string | yes | Reply message |
is_internal | boolean | no | Whether this is an internal note (staff only) |
Response data field | Type | Description |
|---|---|---|
message_id | integer | Created message ID |
curl -X POST "$PANEL_URL/api/admin/tickets/$UUID/reply" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"message":"","is_internal":false}'Plugin events: featherpanel:ticket:message:created
Responses: 201 Reply added successfully · 400 Bad request - Validation errors · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Ticket not found · 500 Internal server error
POST/api/admin/tickets/{uuid}/close
Close ticket Mark a ticket as closed by setting its status to the "closed" status and updating closed_at.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuid | path | string (uuid) | yes | Ticket UUID |
curl -X POST "$PANEL_URL/api/admin/tickets/$UUID/close" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Plugin events: featherpanel:ticket:closed, featherpanel:ticket:status:changed
Responses: 200 Ticket closed successfully · 400 Bad request - Invalid UUID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Ticket or status not found · 500 Internal server error
POST/api/admin/tickets/{uuid}/reopen
Reopen ticket Reopen a previously closed ticket by setting its status to the "open" status and clearing closed_at.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuid | path | string (uuid) | yes | Ticket UUID |
curl -X POST "$PANEL_URL/api/admin/tickets/$UUID/reopen" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Plugin events: featherpanel:ticket:reopened, featherpanel:ticket:status:changed
Responses: 200 Ticket reopened successfully · 400 Bad request - Invalid UUID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Ticket or status not found · 500 Internal server error
GET/api/admin/tickets/{uuid}
Get ticket by UUID Retrieve a specific ticket by its UUID with all messages and attachments.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuid | path | string (uuid) | yes | Ticket UUID |
Response data field | Type | Description |
|---|---|---|
ticket | Ticket | |
messages | object[] | Ticket messages |
attachments | object[] | Ticket attachments |
curl -X GET "$PANEL_URL/api/admin/tickets/$UUID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Responses: 200 Ticket retrieved successfully · 400 Bad request - Invalid UUID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Ticket not found
PATCH/api/admin/tickets/{uuid}
Update ticket Update an existing ticket (status, priority, category, etc.).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuid | path | string (uuid) | yes | Ticket UUID |
Request body: TicketUpdate (application/json)
| Body field | Type | Required | Description |
|---|---|---|---|
server_id | integer | no | Server ID if ticket is related to a server |
category_id | integer | no | Category ID |
priority_id | integer | no | Priority ID |
status_id | integer | no | Status ID |
title | string | no | Ticket title |
description | string | no | Ticket description |
closed_at | string (date-time) | no | Ticket closed timestamp |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
curl -X PATCH "$PANEL_URL/api/admin/tickets/$UUID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"server_id":0,"category_id":0,"priority_id":0,"status_id":0,"title":"","description":"","closed_at":""}'Plugin events: featherpanel:ticket:closed, featherpanel:ticket:reopened, featherpanel:ticket:status:changed, featherpanel:ticket:updated
Responses: 200 Ticket updated successfully · 400 Bad request - Validation errors · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Ticket not found · 500 Internal server error
DELETE/api/admin/tickets/{uuid}
Delete ticket Permanently delete a ticket. This will also delete all messages and attachments.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
uuid | path | string (uuid) | yes | Ticket UUID |
Response data field | Type | Description |
|---|---|---|
message | string | Success message |
curl -X DELETE "$PANEL_URL/api/admin/tickets/$UUID" \
-H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
-H "Accept: application/json"Plugin events: featherpanel:ticket:deleted
Responses: 200 Ticket deleted successfully · 400 Bad request - Invalid UUID · 401 Unauthorized · 403 Forbidden - Insufficient permissions · 404 Ticket not found · 500 Internal server error