# Support: Mosaic API reference

> Support in Mosaic’s local REST API: 6 routes, each with its method, path, fields, what it returns and the errors it names.

Source: https://mosaicbrowser.com/docs/api/support

**More** REST API

## Support

Contact support, request a feature or report a bug, with screenshots, and read the replies. The same requests the Support page in the app files and lists.

- [POSTFile a support request](#submit-support)
- [GETList my support requests](#list-support)
- [GETRead one support request](#get-support)
- [POSTReply to a support request](#reply-support)
- [GETRead one screenshot](#support-screenshot)
- [GETPreview the diagnostics](#support-diagnostics)

## [File a support request](#submit-support)

POST`/api/v1/support/tickets`

Sends a request to Mosaic’s support through the account server. `kind` is `support` (a question or a problem — this kind also emails the support inbox), `feature` or `bug`. **Signed out works**: the request then needs `email`, which is where the reply goes, and this install keeps the key that opens the thread so `GET /support/tickets` still lists it. Screenshots go as base64 in the body and are checked against the type they claim; their metadata — EXIF, XMP, text chunks — is stripped on the server before anything is stored. `diagnostics: true` attaches exactly what `GET /support/diagnostics` shows and nothing else: versions, the operating system and the last log lines with proxy credentials, tokens, email and IP addresses and the home folder scrubbed out. Every refusal names its field, here and again on the server, which reads the same limits.

#### Body

| Field | Type | What it is |
| --- | --- | --- |
| `kind` | `string` | `support`, `feature` or `bug`. Absent is `support`. |
| `subject` | `string` | One line, up to 140 characters. Absent, it is the first line of `message`, cut near 60 characters — the window sends none. |
| `message`required | `string` | Up to 10,000 characters. |
| `email` | `string` | Required when Mosaic is not signed in; when signed in the account’s address is used. |
| `screenshots` | `{ name, type, data }[]` | Up to 4. `type` is `image/png`, `image/jpeg` or `image/webp`; `data` is base64. 3 MB each, 8 MB together. |
| `diagnostics` | `boolean` | Attach the scrubbed diagnostics. Default false — read them first. |

#### Returns

`{ ticket: SupportTicket, guest }` — `guest` is true when it was filed signed out.

#### Errors

- 400 — a field is missing or wrong, named.
- 429 — too many requests in the last hour.
- 502 — the account server could not be reached.

## [List my support requests](#list-support)

GET`/api/v1/support/tickets`

The account’s requests, and the ones filed from this install while signed out, newest activity first. `status` is `open`, `in_progress`, `answered`, `fixed` or `closed`; `lastFrom: "staff"` means an answer is waiting.

#### Returns

`{ tickets: [{ id, kind, subject, status, email, createdAt, updatedAt, lastFrom, replies, screenshots }], signedIn }`

## [Read one support request](#get-support)

GET`/api/v1/support/tickets/:id`

The request and its whole conversation, oldest first, with its screenshots listed. Someone else’s request is a `404`, never a `403`, so an id says nothing about whether it exists.

#### Path parameters

| Field | Type | What it is |
| --- | --- | --- |
| `id`required | `string` | The record’s id. |

#### Returns

`{ ticket, messages: [{ id, from: "user"|"staff", body, createdAt }], screenshots: [{ id, name, type, size }] }`

## [Reply to a support request](#reply-support)

POST`/api/v1/support/tickets/:id/replies`

Adds a message to the thread. A reply to a request that was answered, fixed or closed opens it again.

#### Path parameters

| Field | Type | What it is |
| --- | --- | --- |
| `id`required | `string` | The record’s id. |

#### Body

| Field | Type | What it is |
| --- | --- | --- |
| `message`required | `string` | Up to 10,000 characters. |

#### Returns

`{ message, ticket }`

## [Read one screenshot](#support-screenshot)

GET`/api/v1/support/tickets/:id/screenshots/:screenshotId`

A screenshot of a request as base64 with its type — JSON rather than the raw image, so a model reads it the same way a script does.

#### Path parameters

| Field | Type | What it is |
| --- | --- | --- |
| `id`required | `string` | The record’s id. |
| `screenshotId`required | `string` | From `GET /support/tickets/:id`. |

#### Returns

`{ type, data }`

## [Preview the diagnostics](#support-diagnostics)

GET`/api/v1/support/diagnostics`

Exactly the text `diagnostics: true` attaches, already scrubbed. Nothing is sent. The app shows this under its checkbox before a request goes anywhere; read it the same way before attaching it from a script.

#### Returns

`{ text }`

## Run the API on your own profiles

The REST API and the MCP server are part of Pro: $49 a month, with the first 14 days free. Free has every browser feature and no API key.

Mosaic is a desktop app

Email yourself the link and open it on your computer.
