Support
Prefix: /v1/support on the Public API.
Customers open tickets from the app. Categories are public; ticket CRUD requires a customer JWT (Authorization: Bearer).
Endpoints
| Method | Path | Auth | Purpose |
|---|---|---|---|
GET | /v1/support/categories | Public | Taxonomy for the compose form |
GET | /v1/support/tickets | Customer | List my tickets (paginated; optional status) |
POST | /v1/support/tickets | Customer | Open a ticket |
GET | /v1/support/tickets/:ticketId | Customer | Thread the customer owns |
POST | /v1/support/tickets/:ticketId/messages | Customer | Reply |
PATCH | /v1/support/tickets/:ticketId | Customer | { "action": "confirm" | "reopen" } |
Categories
GET /v1/support/categories returns the allowed category values and their subcategory lists. Use those strings on create; do not invent values.
category | Typical use |
|---|---|
order | Missing / wrong items, quantity |
delivery | Late, driver, wrong address, failed visit |
payment | Charge disputes |
wallet | Balance, credit, refund to wallet |
account | Login, profile, deletion |
product | Damaged, expired, quality |
subscription | Pro billing / access |
other | Anything else |
Some categories require an orderId and/or productIds in the compose rules returned with the taxonomy.
Create
Body
| Field | Required | Notes |
|---|---|---|
subject | yes | Max 200 |
category | yes | From taxonomy |
subcategory | no | From that category’s list |
orderId | no | Link an order the customer owns |
productIds | no | Product ids |
body | yes | Max 4000 |
attachmentUrls | no | Already-uploaded media URLs |
http
POST /v1/support/tickets
Content-Type: application/json
Authorization: Bearer <accessToken>
{
"subject": "Missing milk",
"category": "order",
"subcategory": "missing_items",
"orderId": "665f0c0c0c0c0c0c0c0c0c10",
"body": "One item was not in the bag."
}results includes ticketId and message.
Reply and update
Reply body: message text plus optional attachmentUrls.
PATCH action:
action | When |
|---|---|
confirm | Customer accepts the resolution |
reopen | Customer wants the ticket open again |
Staff reply from the dashboard. Customers also receive in-app notifications (support.ticket_created, support.replied, support.resolved).
Assistant threads can create a ticket via handoff.