Appearance
Support tickets API
All endpoints under /api/support/tickets require a bearer token. Reading needs support:read, creating needs support:create, replying or closing needs support:update.
Prefer email? Writing to support@microapps.io opens a ticket too.
Mind the trailing slash
The collection routes are /api/support/tickets/, with the slash. Drop it and you get a redirect rather than a response, which most HTTP clients will not follow on a POST.
List your tickets
http
GET /api/support/tickets/?page=1&limit=20&search=podPaginated, newest first. Returns the standard { data, total, page, limit, totalPages } envelope. search matches the subject only, case-insensitively - it does not look inside the messages.
json
{
"data": [
{
"id": "6a4d5b83b7006ccae6391870",
"accountId": "6a4d5b83b7006ccae6391800",
"userId": "6a4d5b83b7006ccae6391801",
"subject": "Cannot start my pod",
"category": "technical",
"status": "waiting",
"messages": [
{
"role": "user",
"message": "I clicked start on my-app and it flips straight back to stopped.",
"userId": "6a4d5b83b7006ccae6391801",
"createdAt": "2026-07-16T14:02:11Z"
},
{
"role": "agent",
"message": "Thanks - what does the service log say when it exits?",
"agentId": "6a4d5b83b7006ccae63918a0",
"createdAt": "2026-07-16T15:10:00Z"
}
],
"createdAt": "2026-07-16T14:02:11Z",
"updatedAt": "2026-07-16T15:10:00Z"
}
],
"total": 3,
"page": 1,
"limit": 20,
"totalPages": 1
}Every ticket carries its whole messages thread, so the list response is not a lightweight summary. Ask for a small limit if you have a lot of long threads.
Get a ticket
http
GET /api/support/tickets/:idReturns one ticket in the shape above. A ticket belonging to another account returns 404.
Create a ticket
http
POST /api/support/tickets/json
{
"subject": "Cannot start my pod",
"category": "technical",
"message": "I clicked start on my-app and it flips straight back to stopped."
}Returns 201 with the new ticket, status set to open and your message as the first entry in messages.
category is one of:
| Category | Use it for |
|---|---|
general | Anything that does not fit below |
billing | Credit, invoices, payments |
technical | Something is broken or behaving oddly |
account | Login, profile, team, access |
feature | "It would be great if..." |
| Problem | Status | Message |
|---|---|---|
subject shorter than 3 or longer than 200 characters | 400 | Subject must be between 3 and 200 characters |
message shorter than 10 or longer than 5000 characters | 400 | Message must be between 10 and 5000 characters |
category is not one of the five | 400 | Invalid category |
Leading and trailing whitespace is trimmed before the lengths are checked, and category is lowercased for you.
Reply to a ticket
http
POST /api/support/tickets/:id/repliesjson
{ "message": "Here it is: `Failed to bind to 0.0.0.0:8080, address already in use`. Something else is holding the port." }Returns 200 with the updated ticket, your reply appended. A reply is 1 to 5000 characters.
Replying to a ticket that is waiting on you flips it back to open. Closed or resolved tickets reject replies with 400 ("Cannot reply to a closed or resolved ticket").
Close a ticket
http
PATCH /api/support/tickets/:id/closeNo body. Marks the ticket closed and returns 200 with the updated ticket. Closing one that is already closed returns 400.
Closed and resolved tickets don't take replies - open a new ticket if there's more to say.
Ticket status
A ticket moves through these as we work it, and you will see the current one on the ticket:
| Status | Meaning |
|---|---|
open | We have it, not started yet |
inProgress | Someone is on it |
waiting | We are waiting on you, usually for a reply |
resolved | We think it is sorted |
closed | Done, or you closed it |
You can set closed (by closing the ticket) and open (by replying to one that was waiting). The rest are ours to set. Every change emails the address on your account.
curl example
bash
curl -X POST https://cloud-api.microapps.io/api/support/tickets/ \
-H "Authorization: Bearer $MICROAPPS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"subject": "Cannot start my pod",
"category": "technical",
"message": "I clicked start on my-app and it flips straight back to stopped."
}'Then follow the thread:
bash
curl -s https://cloud-api.microapps.io/api/support/tickets/6a4d5b83b7006ccae6391870 \
-H "Authorization: Bearer $MICROAPPS_API_KEY" \
| jq '.messages[] | {role, createdAt, message}'