Skip to content

Support Tickets API

Manage customer support tickets in your store. This API allows you to list, view, create, and manage support tickets and their messages.

List Tickets

http
GET /api/external/v1/support-tickets

Query Parameters

ParameterTypeDescription
pageintegerPage number (default: 1)
per_pageintegerItems per page (default: 15, max: 100)
statusstringFilter: open, in_progress, waiting_customer, resolved, closed
prioritystringFilter: low, normal, high, urgent
categorystringFilter: order_issue, technical, billing, general
assigned_tointegerFilter by assigned staff user ID
unassignedbooleanFilter for unassigned tickets only
searchstringSearch in ticket number, subject, or customer name/email
from_datestringStart date (YYYY-MM-DD)
to_datestringEnd date (YYYY-MM-DD)
sort_bystringSort field: created_at, updated_at, priority, status, last_reply_at
sort_orderstringSort order: asc, desc

Example Request

bash
curl -X GET "https://yourstore.pixlpay.net/api/external/v1/support-tickets?status=open&priority=high" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json"

Response

json
{
  "success": true,
  "data": [
    {
      "id": 1,
      "ticket_number": "TICKET-ABC123456",
      "subject": "Order not delivered",
      "status": "open",
      "priority": "high",
      "category": "order_issue",
      "customer": {
        "id": 1,
        "name": "Player123",
        "email": "player@example.com"
      },
      "assigned_to": null,
      "messages_count": 3,
      "last_reply_at": "2025-01-20T15:30:00Z",
      "created_at": "2025-01-20T10:00:00Z",
      "updated_at": "2025-01-20T15:30:00Z"
    }
  ],
  "meta": {
    "current_page": 1,
    "last_page": 5,
    "per_page": 15,
    "total": 72
  }
}

Get Single Ticket

http
GET /api/external/v1/support-tickets/{id}

Example Request

bash
curl -X GET "https://yourstore.pixlpay.net/api/external/v1/support-tickets/1" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json"

Response

json
{
  "success": true,
  "data": {
    "id": 1,
    "ticket_number": "TICKET-ABC123456",
    "subject": "Order not delivered",
    "status": "open",
    "priority": "high",
    "category": "order_issue",
    "customer": {
      "id": 1,
      "name": "Player123",
      "email": "player@example.com"
    },
    "assigned_to": {
      "id": 5,
      "name": "Support Staff"
    },
    "order_id": 42,
    "messages": [
      {
        "id": 1,
        "message": "I purchased a VIP rank but haven't received it yet.",
        "is_internal": false,
        "user": {
          "id": 1,
          "name": "Player123"
        },
        "attachments": [],
        "created_at": "2025-01-20T10:00:00Z"
      },
      {
        "id": 2,
        "message": "Let me check your order status.",
        "is_internal": false,
        "user": {
          "id": 5,
          "name": "Support Staff"
        },
        "attachments": [],
        "created_at": "2025-01-20T10:15:00Z"
      }
    ],
    "last_reply_at": "2025-01-20T15:30:00Z",
    "resolved_at": null,
    "closed_at": null,
    "created_at": "2025-01-20T10:00:00Z",
    "updated_at": "2025-01-20T15:30:00Z"
  }
}

Get Ticket Statistics

http
GET /api/external/v1/support-tickets/stats

Example Request

bash
curl -X GET "https://yourstore.pixlpay.net/api/external/v1/support-tickets/stats" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json"

Response

json
{
  "success": true,
  "data": {
    "open": 12,
    "in_progress": 8,
    "waiting_customer": 5,
    "resolved": 45,
    "closed": 230,
    "total": 300
  }
}

Update Ticket Status

Change the status of a support ticket.

http
PUT /api/external/v1/support-tickets/{id}/status

Request Body

ParameterTypeRequiredDescription
statusstringYesNew status: open, in_progress, waiting_customer, resolved, closed

Example Request

bash
curl -X PUT "https://yourstore.pixlpay.net/api/external/v1/support-tickets/1/status" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status": "in_progress"}'

Response

json
{
  "success": true,
  "data": {
    "id": 1,
    "ticket_number": "TICKET-ABC123456",
    "status": "in_progress",
    "updated_at": "2025-01-20T16:00:00Z"
  },
  "message": "Ticket status updated successfully"
}

Add Reply to Ticket

Add a message to an existing support ticket.

http
POST /api/external/v1/support-tickets/{id}/messages

Request Body

ParameterTypeRequiredDescription
messagestringYesReply message content (min: 5 characters)
is_internalbooleanNoWhether this is an internal note (not visible to customer). Default: false

Example Request

bash
curl -X POST "https://yourstore.pixlpay.net/api/external/v1/support-tickets/1/messages" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "Your order has been manually delivered. Please check your in-game inventory.",
    "is_internal": false
  }'

Response

json
{
  "success": true,
  "data": {
    "message": {
      "id": 3,
      "message": "Your order has been manually delivered. Please check your in-game inventory.",
      "is_internal": false,
      "user": {
        "id": 5,
        "name": "Support Staff"
      },
      "attachments": [],
      "created_at": "2025-01-20T16:30:00Z"
    },
    "ticket": {
      "id": 1,
      "status": "waiting_customer",
      "last_reply_at": "2025-01-20T16:30:00Z"
    }
  },
  "message": "Reply added successfully"
}

Close Ticket

Close a support ticket.

http
POST /api/external/v1/support-tickets/{id}/close

Example Request

bash
curl -X POST "https://yourstore.pixlpay.net/api/external/v1/support-tickets/1/close" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json"

Response

json
{
  "success": true,
  "data": {
    "id": 1,
    "ticket_number": "TICKET-ABC123456",
    "status": "closed",
    "closed_at": "2025-01-20T17:00:00Z"
  },
  "message": "Ticket closed successfully"
}

Assign Ticket

Assign a ticket to a staff member.

http
POST /api/external/v1/support-tickets/{id}/assign

Request Body

ParameterTypeRequiredDescription
staff_user_idintegerYesID of the staff member to assign

Example Request

bash
curl -X POST "https://yourstore.pixlpay.net/api/external/v1/support-tickets/1/assign" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"staff_user_id": 5}'

Response

json
{
  "success": true,
  "data": {
    "id": 1,
    "ticket_number": "TICKET-ABC123456",
    "status": "in_progress",
    "assigned_to": {
      "id": 5,
      "name": "Support Staff"
    }
  },
  "message": "Ticket assigned successfully"
}

Support Ticket Object

FieldTypeDescription
idintegerUnique identifier
ticket_numberstringHuman-readable ticket number (e.g., TICKET-ABC123456)
subjectstringTicket subject line
statusstringCurrent status (see Status Values)
prioritystringPriority level (see Priority Values)
categorystringTicket category (see Category Values)
customerobjectCustomer who created the ticket
assigned_toobjectStaff member assigned to ticket (nullable)
order_idintegerAssociated order ID (nullable)
messagesarrayArray of ticket messages
messages_countintegerTotal message count
last_reply_atstringISO 8601 timestamp of last reply
resolved_atstringISO 8601 timestamp when resolved (nullable)
closed_atstringISO 8601 timestamp when closed (nullable)
created_atstringISO 8601 timestamp
updated_atstringISO 8601 timestamp

Ticket Message Object

FieldTypeDescription
idintegerMessage ID
messagestringMessage content
is_internalbooleanWhether message is an internal note
userobjectUser who sent the message
attachmentsarrayFile attachments
created_atstringISO 8601 timestamp

Status Values

StatusDescription
openNew ticket, awaiting staff response
in_progressStaff is actively working on the ticket
waiting_customerAwaiting customer response
resolvedIssue has been resolved
closedTicket is closed

Priority Values

PriorityDescription
lowLow priority issue
normalStandard priority (default)
highHigh priority, needs attention soon
urgentCritical issue, immediate attention required

Category Values

CategoryLabelDescription
order_issueOrder IssueProblems with orders or deliveries
technicalTechnical ProblemTechnical issues or bugs
billingBillingPayment or billing questions
generalGeneral InquiryGeneral questions or feedback

Required Scopes

EndpointScope Required
GET /support-ticketssupport:read
GET /support-tickets/{id}support:read
GET /support-tickets/statssupport:read
PUT /support-tickets/{id}/statussupport:write
POST /support-tickets/{id}/messagessupport:write
POST /support-tickets/{id}/closesupport:write
POST /support-tickets/{id}/assignsupport:write

Errors

StatusErrorDescription
400Bad RequestTicket is already closed, or invalid operation
401UnauthorizedInvalid or missing token
403ForbiddenToken lacks required scope
404Not FoundTicket doesn't exist
422Unprocessable EntityValidation failed (e.g., invalid status, message too short)
500Server ErrorInternal server error

Webhook Events

Support ticket events can trigger webhooks. Subscribe to these events:

EventDescription
support_ticket.createdNew ticket created
support_ticket.updatedTicket status or assignment changed
support_ticket.message_addedNew message added to ticket
support_ticket.closedTicket was closed

See Webhook Events for payload formats.

Built for game developers, by game developers.