support-tickets

6 endpoints.

POST/api/support-tickets/attachment-uploads Bearer token

Request an upload URL for a support ticket screenshot

Issues a presigned URL to PUT one screenshot — PNG, JPEG, WebP or GIF, at most 10 MB — straight to private file storage, before the report or reply that carries it exists. Pass the pathname back in that report's or reply's `attachments`; only the account it was issued to can attach it. Any signed-in account may upload.

Request body

application/jsonrequiredCreateSupportTicketUploadRequest
FieldTypeRequiredDescription
file_namestringyes

1–255 characters

content_typestringyes

The image type the file will be PUT with.

one of "image/png" | "image/jpeg" | "image/webp" | "image/gif"

size_bytesintegeryes

The file's exact size, at most 10 MB.

minimum 1 · maximum 10485760

Responses

StatusDescriptionBody
201Where to PUT the file, and the attachment id minted for it.SupportTicketUploadTicket
400The request body failed validation.ErrorResponse
401The access token is missing or invalid.ErrorResponse
500The upload URL could not be signed.ErrorResponse
503File storage is not configured on this deployment.ErrorResponse
GET/api/support-tickets Bearer token

List support tickets

Lists the support tickets the caller may read, latest activity first, a page at a time: every ticket for a superuser, the caller's own reports for anyone else. `mine=true` narrows a superuser to their own reports too.

Parameters

NameInTypeRequiredDescription
statusquerystringnoOnly tickets in this state.
categoryquerystringnoOnly tickets of this category.
minequerystringnoOnly the caller's own reports. Always the case for a non-superuser.
qquerystringnoSearch words; each must match the description, the page, the reporter's name or email, or the ticket number (42 or #42).
cursorquerystringnoOpaque cursor from a previous page's next_cursor.
limitqueryintegernoPage size, 1-200. Defaults to 50.

Responses

StatusDescriptionBody
200One page of tickets.SupportTicketList
400A query parameter or the cursor is invalid.ErrorResponse
401The access token is missing or invalid.ErrorResponse
500The database could not be read.ErrorResponse
POST/api/support-tickets Bearer token

Report a problem

Opens a support ticket: a category, a plain-text description, the app page it is about, and up to six screenshots uploaded first through the uploads endpoint. The browser it came from is read off the request. The deployment's superusers are told in their inbox. Any signed-in account may report.

Request body

application/jsonrequiredCreateSupportTicketRequest
FieldTypeRequiredDescription
categorystringyes

one of "bug" | "content_issue" | "permissions_error" | "account" | "suggestion" | "other"

descriptionstringyes

What went wrong, in plain text.

1–5000 characters

page_pathstringno

The app path (and query) the problem is on; never an origin.

at most 2000 characters · matches ^\/(?!\/)

page_titlestringno

1–300 characters

attachmentsarray of SupportTicketAttachmentInputno

Screenshots uploaded through the uploads endpoint, at most 6.

at most 6 items

Responses

StatusDescriptionBody
201The new ticket.SupportTicket
400The request body failed validation, or a screenshot is missing from storage or not the one the request describes.ErrorResponse
401The access token is missing or invalid.ErrorResponse
409A screenshot is already attached to another ticket.ErrorResponse
500The database could not be reached, or the write failed.ErrorResponse
503Screenshots were named, but file storage is not configured on this deployment.ErrorResponse
GET/api/support-tickets/{ticket_id} Bearer token

Read a support ticket

One support ticket with its screenshots — each with presigned URLs good for an hour — and its conversation, oldest first. Its reporter and superusers may read it; to anyone else it answers as though it did not exist.

Parameters

NameInTypeRequiredDescription
ticket_idpathstring (uuid)yesUUID id of the support ticket.

Responses

StatusDescriptionBody
200The ticket.SupportTicket
401The access token is missing or invalid.ErrorResponse
404No ticket the caller may read has that id.ErrorResponse
500The database could not be read.ErrorResponse
PATCH/api/support-tickets/{ticket_id} Bearer token

Change a support ticket's status

Moves a ticket to open, in progress or resolved. The change shows in its conversation and its reporter is told. Superusers only; moving it to the status it already has changes nothing.

Parameters

NameInTypeRequiredDescription
ticket_idpathstring (uuid)yesUUID id of the support ticket.

Request body

application/jsonrequiredUpdateSupportTicketRequest
FieldTypeRequiredDescription
statusstringyes

Where the ticket now stands. The change shows in its conversation.

one of "open" | "in_progress" | "resolved"

Responses

StatusDescriptionBody
200The ticket, as it now stands.SupportTicket
400The request body failed validation.ErrorResponse
401The access token is missing or invalid.ErrorResponse
403The caller reported the ticket but is not a superuser.ErrorResponse
404No ticket the caller may read has that id.ErrorResponse
500The database could not be reached, or the write failed.ErrorResponse
POST/api/support-tickets/{ticket_id}/messages Bearer token

Reply on a support ticket

Adds a plain-text reply to a ticket's conversation, with up to six screenshots uploaded first through the uploads endpoint. Its reporter and superusers may reply. A superuser may also move the ticket to a new status with the reply (`status`), or on its own; a reporter's reply reopens a resolved ticket. The other side of the conversation is told in their inbox.

Parameters

NameInTypeRequiredDescription
ticket_idpathstring (uuid)yesUUID id of the support ticket.

Request body

application/jsonrequiredCreateSupportTicketMessageRequest
FieldTypeRequiredDescription
bodystringno

The reply, in plain text.

1–5000 characters

statusstringno

Support staff only: the status to move the ticket to with the reply, such as replying and resolving at once. A reporter's reply reopens a resolved ticket by itself.

one of "open" | "in_progress" | "resolved"

attachmentsarray of SupportTicketAttachmentInputno

Screenshots uploaded through the uploads endpoint, at most 6.

at most 6 items

Responses

StatusDescriptionBody
201The ticket, with the new message in its conversation.SupportTicket
400The request body failed validation, or a screenshot is missing from storage or not the one the request describes.ErrorResponse
401The access token is missing or invalid.ErrorResponse
403The caller sent a status but is not a superuser.ErrorResponse
404No ticket the caller may read has that id.ErrorResponse
409A screenshot is already attached to another ticket.ErrorResponse
500The database could not be reached, or the write failed.ErrorResponse
503Screenshots were named, but file storage is not configured on this deployment.ErrorResponse