6 · Support Tickets
/api/v1/support-tickets/auth/login-linksMint customer sign-in link
Mint a single-use support-portal sign-in link for a customer your backend has already authenticated.
Returns a URL that signs the customer into the support portal without a password. The link expires in 10 minutes and is single-use.
Scope: full-access or ticket-management
Request body
| Field | Type | Notes |
|---|---|---|
email | string (required) | Customer email — portal identity |
name | string (optional, max 100) | Customer display name |
externalId | string (optional, max 200) | Your internal customer ID |
returnTo | string (optional, max 500) | Portal path to land on (must start with /) |
Success — 200 OK
{ "url": "https://support.yourcompany.com/auth/redeem?token=abc123", "expiresAt": "2026-06-26T10:10:00.000Z" }Headers
x-api-keyRequest body
application/json{
"email": "alice@example.com",
"name": "Alice Smith",
"externalId": "cust_789",
"returnTo": "/tickets"
}Responses
200 – Link minted
{
"url": "https://support.yourcompany.com/auth/redeem?token=abc123",
"expiresAt": "2026-06-26T10:10:00.000Z"
}http://localhost:5050/api/v1/support-tickets/auth/login-linksHeaders
x-api-keyRequest body
Code samples
curl -X POST 'http://localhost:5050/api/v1/support-tickets/auth/login-links' \
-H 'Content-Type: application/json' \
--data-raw '{
"email": "alice@example.com",
"name": "Alice Smith",
"externalId": "cust_789",
"returnTo": "/tickets"
}'/api/v1/support-tickets/ticketsList customer tickets
List tickets for a customer, identified by email.
Scope: full-access or ticket-management or read-only
Query params
| Param | Type | Notes |
|---|---|---|
customerEmail | string (required, email) | Customer to fetch tickets for |
status | string (optional) | OPEN |
page | integer (optional, min 1, default 1) | Page number |
limit | integer (optional, 1–100, default 20) | Items per page |
Success — 200 OK returns paginated ticket list.
Headers
x-api-keyParameters
customerEmailquerystringdefault: Customer email (required)pagequerystringdefault: Page number (default 1)limitquerystringdefault: Items per page (1–100, default 20)Responses
200 – Tickets list
{
"tickets": [
{
"ticketId": "tkt_abc123",
"title": "Unable to export invoice PDF",
"status": "OPEN",
"priority": "HIGH",
"createdAt": "2026-06-26T10:00:00.000Z"
}
],
"total": 1,
"page": 1,
"limit": 20
}http://localhost:5050/api/v1/support-tickets/ticketsQuery parameters
customerEmailpagelimitHeaders
x-api-keyCode samples
curl -X GET 'http://localhost:5050/api/v1/support-tickets/tickets'/api/v1/support-tickets/ticketsCreate ticket
Create a support ticket on behalf of a customer. Auto-creates the customer record if not found.
Scope: full-access or ticket-management
Request body
| Field | Type | Notes |
|---|---|---|
title | string (required, max 200) | Ticket title |
description | string (required, max 5000) | Full description |
customerName | string (required, max 100) | Customer full name |
customerEmail | string (required, email) | Customer email |
priority | string (optional) | LOW |
category | string (optional, max 100) | Ticket category |
Success — 201 Created
{ "ticketId": "tkt_abc123", "status": "OPEN", "createdAt": "2026-06-26T10:00:00.000Z" }The test script saves ticketId to the environment automatically.
Headers
x-api-keyRequest body
application/json{
"title": "Unable to export invoice PDF",
"description": "When I click \"Export as PDF\" on any invoice page, I get a blank file. Tested on Chrome 125 and Firefox 128. The file is 0 bytes. My account ID is ACC-4471.",
"customerName": "Alice Smith",
"customerEmail": "alice@example.com",
"priority": "HIGH",
"category": "Billing"
}Responses
Successful response
nullhttp://localhost:5050/api/v1/support-tickets/ticketsHeaders
x-api-keyRequest body
Code samples
curl -X POST 'http://localhost:5050/api/v1/support-tickets/tickets' \
-H 'Content-Type: application/json' \
--data-raw '{
"title": "Unable to export invoice PDF",
"description": "When I click \"Export as PDF\" on any invoice page, I get a blank file. Tested on Chrome 125 and Firefox 128. The file is 0 bytes. My account ID is ACC-4471.",
"customerName": "Alice Smith",
"customerEmail": "alice@example.com",
"priority": "HIGH",
"category": "Billing"
}'/api/v1/support-tickets/tickets/commentsAdd customer comment
Add a public comment from the customer to a ticket.
Scope: full-access or ticket-management
Side effects:
- Auto-reopens
RESOLVEDtickets toIN_PROGRESS - Cannot comment on
CLOSEDtickets (returns 422)
Path param: ticketId (auto-filled from environment)
Request body
| Field | Type | Notes |
|---|---|---|
customerEmail | string (required, email) | Ownership verification |
content | string (required, max 5000) | Comment text |
attachments | array (optional, max 5) | Each item: URI string or {url, name} object |
Success — 201 Created
{ "commentId": "cmt_abc123", "createdAt": "2026-06-26T10:05:00.000Z" }Headers
x-api-keyRequest body
application/json{
"customerEmail": "alice@example.com",
"content": "I tried on Edge as well and the PDF is still blank. I noticed it only happens for invoices older than 90 days. Recent invoices export fine.",
"attachments": [
{
"url": "https://storage.example.com/screenshots/blank-pdf.png",
"name": "blank-pdf.png"
}
]
}Responses
Successful response
nullhttp://localhost:5050/api/v1/support-tickets/tickets/commentsHeaders
x-api-keyRequest body
Code samples
curl -X POST 'http://localhost:5050/api/v1/support-tickets/tickets/comments' \
-H 'Content-Type: application/json' \
--data-raw '{
"customerEmail": "alice@example.com",
"content": "I tried on Edge as well and the PDF is still blank. I noticed it only happens for invoices older than 90 days. Recent invoices export fine.",
"attachments": [
{
"url": "https://storage.example.com/screenshots/blank-pdf.png",
"name": "blank-pdf.png"
}
]
}'