Support
Create and manage support tickets, browse the knowledge base, and run live chat conversations. The Support API exposes the primitives that back the merchant, consumer, and developer help experiences: ticketing, published help articles, and multi-channel chat threads.
Every Support endpoint requires a valid JWT or API key. Send it as Authorization: Bearer <token>.
The authenticated user becomes the requester on tickets and a participant on chat conversations they
create. The base URL for all requests is https://gullypay.xyz/api.
Endpoints
/support/ticketsOpen a new support ticket (auth required)/support/ticketsList the authenticated user's tickets (auth required)/support/tickets/:idGet a ticket with its message thread (auth required)/support/tickets/:idUpdate ticket status, priority, or assignee (auth required)/support/tickets/:id/messagesAdd a message to a ticket (auth required)/support/tickets/:id/assignAssign or unassign a ticket (admin only)/support/agentsList assignable support staff (auth required)/support/tickets/:id/csatSubmit a CSAT rating for a resolved ticket (auth required)/support/csat/summaryCSAT average and distribution for your tickets (auth required)/support/articlesList published knowledge-base articles (auth required)/support/chatList chat conversations with last-message summary (auth required)/support/chatStart a chat conversation (auth required)/support/chat/:conversationId/messagesSend a chat message (auth required)/support/chat/:conversationId/messagesList messages in a conversation (auth required)This API provides ticketing (with priority-based SLA tracking, deterministic type-based auto-routing,
and manual assignment), CSAT ratings, a knowledge base, and chat. On creation a ticket is routed to a
queue by its type and assigned to the least-loaded active staff member; every listed/fetched ticket
carries a live slaStatus computed from its timestamps. The AI support agent and omnichannel
unified-inbox behaviors described in the platform overview are not yet exposed as separate endpoints —
chat messages are stored and retrieved exactly as posted.
Open a Ticket
/support/ticketsOpen a new support ticket| Field | Type | Required | Description |
|---|---|---|---|
subject | string | Yes | Ticket subject (max 500 chars) |
type | string | Yes | Ticket category, e.g. payment_issue, payout_issue, technical_support, api_support |
priority | string | No | One of low, normal, high, urgent (default: normal) |
body | string | Yes | First message body — stored as the opening message on the ticket |
merchantId | string | No | Associate the ticket with a merchant |
The ticket is created with the authenticated user as requester, and body is inserted as the first
message in the thread. The response is the created ticket row.
Get a Ticket
/support/tickets/:idGet a ticket with its message threadReturns the ticket fields plus a messages array of every message on the thread, in insertion order.
Every ticket (from Get and List) is enriched with a resolved assignee object (or null) and
a live slaStatus computed from the ticket's timestamps and priority target. slaStatus.state is the
worst of the first-response and resolution metrics: on_track, at_risk, breached, or met.
Update a Ticket
/support/tickets/:idUpdate ticket status, priority, or assignee| Field | Type | Required | Description |
|---|---|---|---|
status | string | No | One of open, pending, in_progress, resolved, closed |
assigneeId | string | No | User ID of the agent handling the ticket |
priority | string | No | One of low, normal, high, urgent |
Changing status records a status_changed audit event against the ticket. The response is the
updated ticket including its messages thread (same shape as Get a Ticket).
Add a Message
/support/tickets/:id/messagesAdd a message to a ticket| Field | Type | Required | Description |
|---|---|---|---|
body | string | Yes | Message body |
isInternal | boolean | No | When true, the message is stored as an internal (agent-only) note |
The response is the created message row.
Assignment & Routing
Tickets auto-route on creation: the ticket's type selects a queue (payments, trust & safety,
engineering, or general) and it is assigned to the least-loaded active staff member in the platform.
Admins can reassign at any time.
List Agents
/support/agentsList assignable support staffReturns active users with a platform role other than user, ordered by email. Use this to populate an
assignee picker.
Assign a Ticket
/support/tickets/:id/assignAssign or unassign a ticket (admin only)Requires the admin platform role. Pass an assigneeId to assign, or null/omit to unassign. The
change records an assigned audit event and the response is the updated ticket (same enriched shape as
Get a Ticket).
| Field | Type | Required | Description |
|---|---|---|---|
assigneeId | string | null | No | User to assign the ticket to; null or omitted unassigns |
Customer Satisfaction (CSAT)
Requesters can rate a ticket once it is resolved or closed. Each ticket accepts exactly one rating.
Submit a Rating
/support/tickets/:id/csatSubmit a CSAT rating for a resolved ticketReturns 400 if the ticket is not yet resolved/closed, or if it has already been rated. The response
is the created rating row.
| Field | Type | Required | Description |
|---|---|---|---|
score | integer | Yes | Rating from 1 (very dissatisfied) to 5 (very satisfied) |
comment | string | No | Optional free-text feedback (max 2000 chars) |
CSAT Summary
/support/csat/summaryCSAT average and distribution for your ticketsAggregates ratings across the authenticated user's tickets (same scope as List Tickets). average
is null when there are no ratings yet.
Knowledge Base
/support/articlesList published knowledge-base articlesReturns published knowledge-base articles. Pass ?category=<slug> to filter by category; without a
category, only articles with status = published are returned.
| Query | Type | Required | Description |
|---|---|---|---|
category | string | No | Filter articles by category slug |
Live Chat
Chat conversations are threads with one or more participants over a channel (web, mobile, etc.).
List Conversations
/support/chatList chat conversations with last-message summaryReturns conversations ordered by most recent activity (latest message, falling back to when the
conversation started). Pass ?status=<status> to filter. Each row includes a last-message preview
and message count.
| Query | Type | Required | Description |
|---|---|---|---|
status | string | No | Filter by conversation status |
Start a Conversation
/support/chatStart a chat conversation| Field | Type | Required | Description |
|---|---|---|---|
channel | string | No | Channel the conversation originates from (default: web) |
The authenticated user is added as the first participant. The response is the created conversation row.
Send a Message
/support/chat/:conversationId/messagesSend a chat message| Field | Type | Required | Description |
|---|---|---|---|
body | string | Yes | Message body |
List Messages
/support/chat/:conversationId/messagesList messages in a conversationReturns every message in the conversation in insertion order.
Next Steps
- Getting Started -- Authenticate and obtain a token
- CRM -- Customer contacts, campaigns, and loyalty
- Developer Portal -- Status page, changelog, and community