# Contact support from the dashboard

> Start a support conversation, attach files, follow the replies, rate the answer, and reopen a conversation that was closed.

Source: https://docs.coritan.com/support/conversations/

In the dashboard:

- /dashboard/support: https://www.coritan.com/dashboard/support
- /dashboard/support/…: https://www.coritan.com/dashboard/support

A *conversation* is a thread between you and the Coritan team about one question. Each conversation has a number, such as `#1042`, and the dashboard also calls it a *ticket*. You start conversations and read the team's replies on the [**Support** page](https://www.coritan.com/dashboard/support) of the dashboard.

## Before you begin

- Sign in to the [dashboard](https://www.coritan.com/dashboard). Every account can start conversations, whatever services it has.
- Have ready the details that [What to include](/support/#what-to-include) lists: the service, what happened and any error message.
- If you cannot sign in, email [support@coritan.com](mailto:support@coritan.com) instead.
- If you bought the service from an organization's storefront, ask that organization. The **Support** page reaches Coritan's team, and each organization answers its own customers.

## Start a conversation

1. In the sidebar or the top bar, select **Support**.
2. Select **New conversation…**. The **Open a ticket** button on the dashboard's overview opens the same form.
3. In **Subject**, sum up the problem in one line, such as `Backups stopped on survival-smp`. A subject can be up to 300 characters.
4. Choose the **Department** the question belongs to. The form starts on the first one in the list. The text under the field says what the department handles and how soon it aims to reply.
5. Choose the **Priority**: Low, Medium, High or Critical. It starts on Medium. The team takes higher priorities first, so keep Critical for a service that is down.
6. Under **About a service**, choose the service the question is about, or leave **Not about a specific service**. The person who answers then sees the service straight away.
7. In **Message**, write what happened, what you expected, and what you have already tried. A message can be up to 10,000 characters.
8. Select **Start conversation**.

The dashboard shows `Conversation started.` and opens the conversation. The form takes no files: attach them once the conversation is open.

## Reply and attach files

Open a conversation from the list on the **Support** page. The reply box is at the bottom of the thread.

- Write your reply and select **Send**. With a keyboard, <kbd>Enter</kbd> sends and <kbd>Shift</kbd> <kbd>Enter</kbd> starts a new line. On a touch screen, <kbd>Enter</kbd> starts a new line and only **Send** sends.
- To attach a file, select **Attach file**, the paperclip beside the reply box, or drop the file on the box. Each file goes up on its own, as a message of its own. A file can be up to 25 MB.
- After you attach a file, send a reply that says what it is. A file on its own does not tell the team you wrote.
- Select a file in the thread to download it. Images show a small preview.

We accept these kinds of file:

| Kind | Files |
| --- | --- |
| Images | JPEG, PNG, GIF, WebP and SVG |
| Documents | PDF, Word and Excel |
| Text | Plain text, CSV, HTML, JSON and XML |
| Archives | ZIP, gzip and tar |

We go by the type your browser reports for each file. Browsers report a file that ends in `.log` with no type we accept, so rename a log to end in `.txt` before you attach it. Some browsers also report XML, gzip and ZIP files with types we do not accept ([Troubleshooting](#troubleshooting)).

> [!IMPORTANT]
> You cannot edit or delete a message or a file after you send it. Leave out passwords, recovery codes and card numbers.

## Follow the replies

The **Support** page lists your conversations with the latest activity first, 20 to a page. **Older** and **Newer** move between pages. A conversation with messages you have not read shows its subject in bold and a count such as `2 unread`.

To find a conversation:

- Select **All**, **Open**, **Awaiting you** or **Closed** above the list. **Open** lists every conversation that is not closed, and **Awaiting you** lists the ones that wait for your answer.
- Choose one priority in the menu that starts on **Any priority**.
- Search by subject, by number such as `#1042`, or by words from the latest message.

When nothing matches, the list says `No matches`, and **Reset filters** clears the search and the filters.

Each conversation shows one of these statuses:

| Status | What it means |
| --- | --- |
| `Open` | New, or reopened. |
| `In progress` | Someone on the team has taken it and is working on it. |
| `Awaiting agent` | You wrote last, and the team has not replied yet. |
| `Awaiting you` | The team replied, and waits for your answer. |
| `On hold` | The team has set it aside for now. |
| `Closed` | The matter is settled. You can reopen it. |

A conversation's header shows its number, its department and the service it is about. The team's replies appear in the thread as they are sent, and `Support is typing` shows while someone writes to you. Short lines in the thread, such as `Conversation closed`, record changes to the conversation. Opening a conversation marks its messages read.

The thread opens at the newest message. Scroll up, or select **Load older messages**, to read further back. When a reply arrives while you read older messages, **New messages** takes you down to it.

If the live connection drops, the thread says `Reconnecting. Replies from support appear here once the connection is back.` When it cannot reconnect, it says `Live updates are off. Your messages still go through, and replies from support appear after you reconnect.` Select **Reconnect**. The messages you send go through either way.

### Email about replies

If a reply is still unread a few minutes after the team's last message, we email it to the address you sign in with. The subject is `Re: <subject> [#<number>]`, such as `Re: Backups stopped on survival-smp [#1042]`. The email holds every reply you have not read, with its time in UTC and the names of any files, and a link to the conversation. A reply to that email does not reach the conversation, so follow its link to answer. If you read the replies on the page first, we send no email.

## Close a conversation and rate it

When the matter is settled, close the conversation:

1. Open the conversation and select **Close conversation…**.
2. Select **Close conversation** to confirm. **Keep it open** leaves it as it was.

The dashboard shows `Conversation closed.`, and the reply box gives way to `This conversation is closed. Reopen it to write again.` The team can close a conversation too.

A closed conversation asks `How was the help you got?`. To rate the help:

1. Choose from one star, **Poor**, to five stars, **Excellent**.
2. Add a comment of up to 500 characters if you want to.
3. Select **Send rating**.

The conversation then says, for example, `You rated this conversation 4/5 (Very good).` You can rate a conversation once, and a second rating keeps the first. The rating stays when you reopen the conversation.

## Reopen a conversation

If the problem comes back, reopen its conversation so the team has the history:

1. On the **Support** page, select **Closed**, then open the conversation.
2. Select **Reopen conversation**.

The dashboard shows `Conversation reopened.`, the status goes back to `Open`, and you can write again. We tell the team that you reopened it.

## Conversations opened for you

Some conversations start without the form:

- When we flag unusual activity on one of your servers, or lock one, we open a conversation called `Server activity review` with high priority. It waits for your answer: reply to tell us what the activity is. [The server is locked](/managed-containers/troubleshooting/#the-server-is-locked) explains a lock.
- A request for a higher SMTP Relay limit opens a conversation about it ([Request a higher hourly limit](/mail/smtp-relay/request-a-higher-limit/)).
- When a member of an organization's team escalates a customer's conversation to Coritan, a conversation opens on that member's own account, with `[Escalated]` before the subject ([Escalate a conversation to Coritan](/organizations/staff-console/support-inbox/#escalate-a-conversation-to-coritan)).

They appear in your list with the others, and you answer them in the same way.

## Result

Your conversation is on the **Support** page with its number and its status. The team's replies arrive in the thread, and by email when you have not read them there.

## Troubleshooting

`Enter a subject.` or `Write what you need help with.`
: The form needs a subject and a message before it can start the conversation.

`Could not start the conversation`
: The text under it says why. A subject over 300 characters or a message over 10,000 characters is refused, so shorten it. After `Please try again in a moment`, select **Start conversation** again.

`Could not load your conversations`
: The list did not load. Select **Try again**, or reload the page.

`Could not open that conversation: it does not exist, or it belongs to another account.`
: The link is for a conversation on another account, or the address is wrong. Sign in to the account that started the conversation. People you share a server with cannot see your conversations.

`Could not send the message`
: The reply did not go, and it stays in the box. Check your connection and select **Send** again.

`Could not attach` a file, with `files can be up to 25 MB.`
: The file is over the limit. Attach a smaller file, such as the part of a log around the problem.

`Could not attach` a file, with `File type not allowed:` and a type
: Your browser reported a type we do not accept. A log usually comes up as `application/octet-stream`: rename it to end in `.txt`. We also refuse `application/x-zip-compressed`, `application/gzip` and `text/xml`, which some browsers report for ZIP, gzip and XML files. Attach the files inside such an archive one at a time instead, and save screenshots as PNG or JPEG.

`This conversation is closed. Reopen it to write again.`
: Select **Reopen conversation** under the message.

`Live updates are off. Your messages still go through, and replies from support appear after you reconnect.`
: Select **Reconnect**, or reload the page.

No email about a reply
: We email only the replies you have not read on the page, to the address you sign in with. [Update your profile](/account/profile/) shows where to see it. Check your spam folder, and open the **Support** page to read the reply.

`Account is suspended or closed` when you sign in
: The account cannot sign in, so it cannot start a conversation. Email [support@coritan.com](mailto:support@coritan.com) from the address the account uses.

## Related

- [Support](/support/), for the other ways to reach us
- [The dashboard](/get-started/dashboard/)
- [Troubleshoot servers](/managed-containers/troubleshooting/)
- [Answer customer conversations](/organizations/staff-console/support-inbox/), for an organization's own support

## With the API

Every support route is under `https://api.coritan.com/api/v1/chat/` and takes your access token, as [Authentication](/api/authentication/) explains. The [Support section of the API reference](/api/reference/client/support/) lists every field. The routes take a conversation's `id`. Its `conversation_number` is the number the dashboard shows, such as `#1042`.

A conversation on another account answers `403` with `Access denied`. So does an ID that does not exist, except on `GET /chat/conversations/{conversation_id}`, which answers `404` with `Conversation not found`. A body outside the limits below answers `422`, with the field in `detail` ([Errors](/api/errors/)).

### Read the form's options

[`GET /chat/meta`](/api/reference/client/support/#op-get-api-v1-chat-meta) answers what the dashboard's form offers:

`departments`
: Each department's `slug`, `name`, `description` and `color`, its target times for the first reply and for the resolution in minutes (`sla_first_response_minutes` and `sla_resolution_minutes`), its `route`, and `available`, which is `true` for every department on a Coritan account.

`priorities`
: `low`, `medium`, `high` and `critical`.

`attachments`
: `max_size_mb`, which is `25`, `max_files`, and the types we accept in `allowed_mime_types`. Each upload carries one file, whatever `max_files` says.

`access`
: `can_open_tickets`, `routes`, `policy_enabled` and `message`. On a Coritan account every route is open and `message` is `null`.

### Create a conversation

```bash
curl -X POST https://api.coritan.com/api/v1/chat/conversations \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "Backups stopped on survival-smp",
    "department": "technical",
    "priority": "high",
    "service_id": 4821,
    "body": "The nightly backup has not run since Sep 14, 2026. I have not changed the schedule.",
    "client_request_id": "7d3c6f0e-2b1a-4c8e-9f5d-6a4b3c2d1e0f"
  }'
```

[`POST /chat/conversations`](/api/reference/client/support/#op-post-api-v1-chat-conversations) answers `201` with the conversation: its `id`, its `conversation_number`, `status` set to `open`, and the first message in `messages`. It takes:

`subject`
: Required, up to 300 characters.

`body`
: Required, 1–10,000 characters.

`department`
: A `slug` from `GET /chat/meta`. Without one, the conversation has no department.

`priority`
: `low`, `medium`, `high` or `critical`. `medium` if you leave it out.

`service_id`
: The `id` of the service the question is about, as [`GET /services/`](/api/reference/client/services/#op-get-api-v1-services) lists it.

`client_request_id`
: Up to 64 characters. A retry with the same value answers the conversation the first request opened, and opens no second one ([Idempotency](/api/idempotency/)).

A `409` with `Please try again in a moment` means two requests arrived at once. Send the request again with the same `client_request_id`.

### List and read conversations

```bash
curl "https://api.coritan.com/api/v1/chat/conversations?status=awaiting_customer&limit=20" \
  -H "Authorization: Bearer $CORITAN_TOKEN"
```

[`GET /chat/conversations`](/api/reference/client/support/#op-get-api-v1-chat-conversations) answers a JSON array, latest activity first. It takes:

- `status`: `open` for every conversation that is not closed, or one of `in_progress`, `awaiting_customer`, `awaiting_agent`, `on_hold` and `closed`. A word it does not know answers an empty list.
- `priority`: `low`, `medium`, `high` or `critical`. Another word answers `422`.
- `q`: up to 200 characters, matched against the subject and the latest message. A number, such as `1042` or `#1042` (sent as `%231042`), also finds that conversation.
- `page`, from 1, and `limit`, from 1 to 100 (20 by default). [Pagination and filtering](/api/pagination/) shows how to walk every page.

Each item has `id`, `conversation_number`, `subject`, `status`, `priority`, `department`, `last_message_at`, `last_message_preview`, `unread_count`, `csat_score`, `created_at` and `updated_at`. `unread_count` counts the messages you did not write and have not marked read.

[`GET /chat/conversations/{conversation_id}`](/api/reference/client/support/#op-get-api-v1-chat-conversations-conversation-id) answers one conversation with all its messages in `messages`, and adds `service_id`, `closed_at`, `reopened_count`, and the rating in `csat_score`, `csat_comment` and `csat_rated_at`. The team's internal notes never appear.

### Read and send messages

```bash
curl "https://api.coritan.com/api/v1/chat/conversations/5120/messages?after_id=88213" \
  -H "Authorization: Bearer $CORITAN_TOKEN"
```

[`GET .../messages`](/api/reference/client/support/#op-get-api-v1-chat-conversations-conversation-id-messages) answers messages oldest first, `limit` at a time (50 by default, at most 100). With no other parameter it answers the latest messages. `before_id` answers the ones before that message, to read further back, and `after_id` the ones after it, to pick up new replies. Poll no more often than you need to ([Rate limits](/api/rate-limits/)).

Each message has:

- `id` and `created_at`;
- `sender_type`: `user` for you, `agent` for the team, and `system` for lines such as `Conversation closed`;
- `sender_name`, `body` and `content_type`, which is `text`, `attachment` or `system_event`;
- `attachments`, each with `id`, `file_name`, `file_size` in bytes, `mime_type` and `created_at`;
- `read_at`, set on a message you did not write once you mark it read;
- `client_request_id`, when you sent one.

```bash
curl -X POST https://api.coritan.com/api/v1/chat/conversations/5120/messages \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body": "The backup ran again last night.", "client_request_id": "0c9e2f4a-8d1b-4e6f-a3c5-7b2d9e1f4a6c"}'
```

[`POST .../messages`](/api/reference/client/support/#op-post-api-v1-chat-conversations-conversation-id-messages) takes a `body` of 1–10,000 characters and an optional `client_request_id` of up to 64, which works as it does for a new conversation. It answers the message, and the conversation moves to `awaiting_agent`. A closed conversation answers `400` with `Conversation is closed`: reopen it first.

### Attach and download files

```bash
curl -X POST https://api.coritan.com/api/v1/chat/conversations/5120/attachments \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -F "file=@latest.log;type=text/plain"
```

[`POST .../attachments`](/api/reference/client/support/#op-post-api-v1-chat-conversations-conversation-id-attachments) takes one file, as the form field `file`, and adds it as a message of its own. It answers `201` with the file's `id`, the `message_id`, `file_name`, `file_size` and `mime_type`. Set the part's type yourself, as the example does: curl sends `application/octet-stream` for a name it does not recognise, and we refuse that type. It answers `400` with:

- `File type not allowed:` and the type, for a type that `allowed_mime_types` does not list;
- `File exceeds 25MB limit`, for a larger file;
- `Conversation is closed`.

A file on its own leaves the status as it was and does not alert the team, so send a message about it as well.

[`GET .../attachments/{attachment_id}`](/api/reference/client/support/#op-get-api-v1-chat-conversations-conversation-id-attachments-attachment-id) answers the file with its type, as a download under its name. A file that is not in that conversation answers `404` with `Attachment not found`.

[`GET .../attachments/{attachment_id}/thumbnail`](/api/reference/client/support/#op-get-api-v1-chat-conversations-conversation-id-attachments-attachment-id-thumbnai) answers a preview at most 200 pixels wide and high, for JPEG, PNG, GIF and WebP images. Other files answer `404` with `Thumbnail not available`. The preview of a PNG image is a PNG file and the others are JPEG files, but the `Content-Type` of each is `image/jpeg`.

### Mark replies read

```bash
curl -X POST https://api.coritan.com/api/v1/chat/conversations/5120/read \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"up_to_message_id": 88213}'
```

[`POST .../read`](/api/reference/client/support/#op-post-api-v1-chat-conversations-conversation-id-read) marks the messages you did not write as read, up to and including `up_to_message_id`. The body is required: send `{}` to mark every message read. It answers `{"ok": true, "marked": 2, "up_to_message_id": 88213}`, where `marked` counts the messages it marked. We leave the replies you mark read out of the email.

### Close, reopen and rate

```bash
curl -X POST https://api.coritan.com/api/v1/chat/conversations/5120/close \
  -H "Authorization: Bearer $CORITAN_TOKEN"
```

[`POST .../close`](/api/reference/client/support/#op-post-api-v1-chat-conversations-conversation-id-close) and [`POST .../reopen`](/api/reference/client/support/#op-post-api-v1-chat-conversations-conversation-id-reopen) take no body and answer the conversation. Closing sets `status` to `closed` and fills `closed_at`. Reopening sets `status` to `open` and adds 1 to `reopened_count`. Closing a closed conversation, or reopening an open one, changes nothing.

```bash
curl -X POST https://api.coritan.com/api/v1/chat/conversations/5120/csat \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"score": 5, "comment": "Fixed within the hour."}'
```

[`POST .../csat`](/api/reference/client/support/#op-post-api-v1-chat-conversations-conversation-id-csat) takes a `score` from 1 to 5 and an optional `comment` of up to 500 characters. It answers `ok`, `already_rated`, and the rating in `csat_score`, `csat_comment` and `csat_rated_at`. A second rating answers the first one, with `already_rated` set to `true`. A conversation that is not closed answers `400` with `Rate the ticket once it is closed`.

## API

- `GET /api/v1/chat/meta`: Get support meta (https://docs.coritan.com/api/reference/client/support/#op-get-api-v1-chat-meta)
- `GET /api/v1/chat/conversations`: List user conversations (https://docs.coritan.com/api/reference/client/support/#op-get-api-v1-chat-conversations)
- `POST /api/v1/chat/conversations`: Create user conversation (https://docs.coritan.com/api/reference/client/support/#op-post-api-v1-chat-conversations)
- `GET /api/v1/chat/conversations/{conversation_id}`: Get user conversation (https://docs.coritan.com/api/reference/client/support/#op-get-api-v1-chat-conversations-conversation-id)
- `GET /api/v1/chat/conversations/{conversation_id}/messages`: Get conversation messages (https://docs.coritan.com/api/reference/client/support/#op-get-api-v1-chat-conversations-conversation-id-messages)
- `POST /api/v1/chat/conversations/{conversation_id}/messages`: Send user message (https://docs.coritan.com/api/reference/client/support/#op-post-api-v1-chat-conversations-conversation-id-messages)
- `POST /api/v1/chat/conversations/{conversation_id}/attachments`: Upload attachment (https://docs.coritan.com/api/reference/client/support/#op-post-api-v1-chat-conversations-conversation-id-attachments)
- `GET /api/v1/chat/conversations/{conversation_id}/attachments/{attachment_id}`: Download attachment (https://docs.coritan.com/api/reference/client/support/#op-get-api-v1-chat-conversations-conversation-id-attachments-attachment-id)
- `GET /api/v1/chat/conversations/{conversation_id}/attachments/{attachment_id}/thumbnail`: Download thumbnail (https://docs.coritan.com/api/reference/client/support/#op-get-api-v1-chat-conversations-conversation-id-attachments-attachment-id-thumbnai)
- `POST /api/v1/chat/conversations/{conversation_id}/read`: Mark user conversation read (https://docs.coritan.com/api/reference/client/support/#op-post-api-v1-chat-conversations-conversation-id-read)
- `POST /api/v1/chat/conversations/{conversation_id}/close`: Close user conversation (https://docs.coritan.com/api/reference/client/support/#op-post-api-v1-chat-conversations-conversation-id-close)
- `POST /api/v1/chat/conversations/{conversation_id}/reopen`: Reopen user conversation (https://docs.coritan.com/api/reference/client/support/#op-post-api-v1-chat-conversations-conversation-id-reopen)
- `POST /api/v1/chat/conversations/{conversation_id}/csat`: Rate user conversation (https://docs.coritan.com/api/reference/client/support/#op-post-api-v1-chat-conversations-conversation-id-csat)
