> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fusiondesk.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# How to Create and Submit Tickets in FusionDesk

> Learn how to create support tickets in FusionDesk from the dashboard, via email, or through the REST API with required fields and priority settings.

Creating a ticket is the starting point for every support interaction in FusionDesk. Whether you're logging an issue reported by a customer, escalating an internal bug, or triaging an incoming email, FusionDesk gives you multiple ways to open a ticket — from the visual dashboard, via an incoming email channel, or programmatically through the REST API. This guide walks you through each method so you can choose the approach that best fits your workflow.

## Creating a Ticket from the Dashboard

The quickest way to open a new ticket is directly from the FusionDesk dashboard. You can fill in all required fields, set a priority, and assign the ticket to an agent in one step.

<Steps>
  <Step title="Navigate to the Tickets section">
    In the left sidebar, click **Tickets**, then select **New Ticket** from the top-right corner of the tickets list view.
  </Step>

  <Step title="Fill in the Subject">
    Enter a clear, concise subject line that summarizes the issue. This is the primary identifier for the ticket across views, notifications, and reports.
  </Step>

  <Step title="Add a Description">
    In the **Description** field, provide full context about the issue — include steps to reproduce, error messages, screenshots, or any relevant details that will help the assigned agent respond quickly.
  </Step>

  <Step title="Set the Priority">
    Choose a priority level from the dropdown: **Urgent**, **High**, **Medium**, or **Low**. The priority you set determines which SLA policy governs the ticket's response and resolution targets.
  </Step>

  <Step title="Assign the Ticket">
    Select an agent or team from the **Assignee** field. If you leave this blank, the ticket will sit in the unassigned queue until it is picked up manually or by an automation rule.
  </Step>

  <Step title="Submit the Ticket">
    Click **Create Ticket**. The ticket is immediately created with an **Open** status and a unique ticket ID (e.g., `tkt_xyz789`). The assigned agent receives an email and in-app notification.
  </Step>
</Steps>

<Tip>
  Set the priority at the time of creation, not after. Tickets enter the SLA clock the moment they are created, so an incorrect priority can cause a breach before anyone notices the mistake.
</Tip>

## Ticket Fields Reference

The table below describes every field available when creating or editing a ticket. Fields marked as required must be filled before a ticket can be submitted.

| Field           | Type             | Required | Description                                                                                        |
| --------------- | ---------------- | -------- | -------------------------------------------------------------------------------------------------- |
| **Subject**     | String           | ✅ Yes    | A short, descriptive title for the issue. Appears in all list views and notifications.             |
| **Description** | Rich text        | ✅ Yes    | Full details of the issue. Supports markdown, inline images, and file attachments.                 |
| **Priority**    | Enum             | No       | Severity level: `urgent`, `high`, `medium`, or `low`. Drives SLA policy assignment.                |
| **Assignee**    | User / Team      | No       | The agent or team responsible for resolving the ticket. Can be set automatically by routing rules. |
| **Tags**        | Array of strings | No       | Free-form labels used for filtering, reporting, and automation triggers (e.g., `auth`, `billing`). |
| **Attachments** | File(s)          | No       | Supporting files such as logs, screenshots, or exports. Max 25 MB per file.                        |
| **Status**      | Enum             | Auto-set | Initial status is always `open`. Transitions through the lifecycle as the ticket is worked.        |

## Creating Tickets via API

If you need to create tickets programmatically — for example, from a monitoring alert or a customer-facing web form — use the FusionDesk REST API. All API requests require a Bearer token in the `Authorization` header.

<CodeGroup>
  ```bash cURL theme={null}
  curl --request POST \
    --url https://api.fusiondesk.in/v1/tickets \
    --header 'Authorization: Bearer <your_api_token>' \
    --header 'Content-Type: application/json' \
    --data '{
      "subject": "Login page returns 500 error",
      "description": "Users are unable to log in. The page returns a 500 error after clicking submit.",
      "priority": "high",
      "assignee_id": "usr_abc123",
      "tags": ["auth", "production"]
    }'
  ```

  ```python Python theme={null}
  import requests

  url = "https://api.fusiondesk.in/v1/tickets"
  headers = {
      "Authorization": "Bearer <your_api_token>",
      "Content-Type": "application/json"
  }
  payload = {
      "subject": "Login page returns 500 error",
      "description": "Users are unable to log in. The page returns a 500 error after clicking submit.",
      "priority": "high",
      "assignee_id": "usr_abc123",
      "tags": ["auth", "production"]
  }

  response = requests.post(url, json=payload, headers=headers)
  print(response.json())
  ```

  ```js Node.js theme={null}
  const response = await fetch("https://api.fusiondesk.in/v1/tickets", {
    method: "POST",
    headers: {
      "Authorization": "Bearer <your_api_token>",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      subject: "Login page returns 500 error",
      description: "Users are unable to log in. The page returns a 500 error after clicking submit.",
      priority: "high",
      assignee_id: "usr_abc123",
      tags: ["auth", "production"]
    })
  });

  const ticket = await response.json();
  console.log(ticket);
  ```
</CodeGroup>

A successful `201 Created` response returns the new ticket object:

```json theme={null}
{
  "id": "tkt_xyz789",
  "subject": "Login page returns 500 error",
  "status": "open",
  "priority": "high",
  "created_at": "2024-01-15T09:30:00Z"
}
```

Use the returned `id` to reference the ticket in subsequent API calls — for example, to update its status, add a note, or attach a file.

### Request Body Parameters

<ParamField body="subject" type="string" required>
  The title of the ticket. Must be between 3 and 255 characters.
</ParamField>

<ParamField body="description" type="string" required>
  Full description of the issue. Plain text or markdown is accepted.
</ParamField>

<ParamField body="priority" type="string">
  Severity level. Accepted values: `urgent`, `high`, `medium`, `low`. Defaults to `medium` if omitted.
</ParamField>

<ParamField body="assignee_id" type="string">
  The unique ID of the agent to assign the ticket to. Omit to leave unassigned.
</ParamField>

<ParamField body="tags" type="array">
  An optional array of string tags to categorize the ticket for filtering and automation.
</ParamField>

## Bulk Ticket Import

If you are migrating from another help desk platform or need to create many tickets at once, FusionDesk supports bulk import via a CSV upload. The CSV import wizard is available under **Settings → Data Import → Tickets** and walks you through field mapping, duplicate detection, and a dry-run preview before committing the import. For large-scale programmatic ingestion, contact your FusionDesk account manager to discuss rate limit increases for your workspace.
