Skip to content

Support

The Support API provides an in-app support ticket system. Users can create tickets, add replies, and close tickets. Admin-facing endpoints allow managing all tickets. All endpoints require authentication.


Create a new support ticket.

Authentication: Bearer token required.

POST /v1/support/tickets
Authorization: Bearer eyJhbGciOiJSUzI1NiJ9...
Content-Type: application/json
{
"subject": "Payment not received",
"body": "I completed a 30-minute session yesterday but the payment has not appeared in my earnings.",
"category": "billing",
"priority": "high"
}
FieldTypeRequiredDescription
subjectstringYesTicket subject line
bodystringYesDetailed description
categorystringNobilling, technical, account, other
prioritystringNolow, normal (default), high, urgent
HTTP/1.1 201 Created
{
"id": "01JN2XG6H7I8J9K0L1M2N3O4P5",
"subject": "Payment not received",
"status": "open",
"priority": "high",
"category": "billing",
"created_at": "2026-03-15T10:00:00Z",
"messages": [
{
"id": "01JN2XH7I8J9K0L1M2N3O4P5Q6",
"body": "I completed a 30-minute session yesterday but the payment has not appeared in my earnings.",
"is_admin": false,
"created_at": "2026-03-15T10:00:00Z"
}
]
}

List the authenticated user’s support tickets.

Authentication: Bearer token required.

GET /v1/support/tickets?page=1&per_page=20
Authorization: Bearer eyJhbGciOiJSUzI1NiJ9...
Query ParameterTypeDescription
pageintegerPage number (default: 1)
per_pageintegerResults per page (default: 20)
{
"success": true,
"data": [
{
"id": "01JN2XG6H7I8J9K0L1M2N3O4P5",
"subject": "Payment not received",
"status": "in_progress",
"priority": "high",
"category": "billing",
"created_at": "2026-03-15T10:00:00Z",
"updated_at": "2026-03-15T11:00:00Z"
}
],
"pagination": {
"page": 1,
"per_page": 20,
"total": 2,
"total_pages": 1
}
}

Get a single ticket with all its messages.

Authentication: Bearer token required. Must be the ticket owner.

GET /v1/support/tickets/01JN2XG6H7I8J9K0L1M2N3O4P5
Authorization: Bearer eyJhbGciOiJSUzI1NiJ9...
{
"id": "01JN2XG6H7I8J9K0L1M2N3O4P5",
"subject": "Payment not received",
"status": "in_progress",
"priority": "high",
"category": "billing",
"created_at": "2026-03-15T10:00:00Z",
"messages": [
{
"id": "01JN2XH7I8J9K0L1M2N3O4P5Q6",
"body": "I completed a 30-minute session yesterday...",
"is_admin": false,
"created_at": "2026-03-15T10:00:00Z"
},
{
"id": "01JN2XI8J9K0L1M2N3O4P5Q6R7",
"body": "Thank you for reporting this. I can see the payment was captured. Let me check the payout status.",
"is_admin": true,
"created_at": "2026-03-15T11:00:00Z"
}
]
}

Reply to an existing support ticket.

Authentication: Bearer token required. Must be the ticket owner.

POST /v1/support/tickets/01JN2XG6H7I8J9K0L1M2N3O4P5/messages
Authorization: Bearer eyJhbGciOiJSUzI1NiJ9...
Content-Type: application/json
{
"body": "Thank you for looking into this. The session was with user janecoach on March 14th at 2pm."
}
HTTP/1.1 201 Created

Returns the created message object.


Close a support ticket. Only the ticket owner can close it.

Authentication: Bearer token required. Must be the ticket owner.

POST /v1/support/tickets/01JN2XG6H7I8J9K0L1M2N3O4P5/close
Authorization: Bearer eyJhbGciOiJSUzI1NiJ9...

Returns the updated ticket with status: "closed".


open --> in_progress --> resolved --> closed
| ^
+------------------------+
(admin can close)
StatusDescription
openTicket created, awaiting admin review
in_progressAdmin is working on the ticket
resolvedIssue resolved, awaiting user confirmation
closedTicket closed (by user or admin)

The following endpoints are available to users with the admin role under /v1/admin/support/tickets/.

List all support tickets. Supports filtering by status.

GET /v1/admin/support/tickets?status=open&page=1&per_page=20
Authorization: Bearer eyJhbGciOiJSUzI1NiJ9...
Query ParameterTypeDescription
statusstringFilter by status: open, in_progress, resolved, closed
pageintegerPage number
per_pageintegerResults per page

Update ticket status, priority, or assignment.

PATCH /v1/admin/support/tickets/01JN2XG6H7I8J9K0L1M2N3O4P5
Authorization: Bearer eyJhbGciOiJSUzI1NiJ9...
Content-Type: application/json
{
"status": "in_progress",
"priority": "urgent"
}

POST /v1/admin/support/tickets/:id/messages

Section titled “POST /v1/admin/support/tickets/:id/messages”

Admin reply to a ticket. The reply is marked with is_admin: true.

POST /v1/admin/support/tickets/01JN2XG6H7I8J9K0L1M2N3O4P5/messages
Authorization: Bearer eyJhbGciOiJSUzI1NiJ9...
Content-Type: application/json
{
"body": "I've checked the payout logs. The payment was captured successfully and a payout has been initiated."
}