> ## 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 Manage, Update, and Resolve Tickets in FusionDesk

> Update ticket status, reassign tickets to agents, add internal notes, merge duplicates, filter your queue, and close resolved issues in FusionDesk.

Once a ticket is open, your team's job is to move it forward — gathering context, communicating with the requester, delegating to the right agent, and ultimately resolving the issue. FusionDesk gives you a full set of tools to manage every ticket across its lifecycle: inline editing, internal notes, merge workflows, and powerful filters to keep your queue organized. This guide covers all of those actions in one place.

<Note>
  Every action taken on a ticket — status changes, reassignments, edits, replies, and merges — is permanently recorded in the **Ticket Activity Log** at the bottom of the ticket detail view. This audit trail cannot be edited or deleted, making it a reliable record for compliance reviews and post-incident analysis.
</Note>

## Ticket Lifecycle

Tickets in FusionDesk move through a defined set of statuses from creation to closure. Understanding the lifecycle helps your team communicate progress accurately and keeps SLA timers behaving as expected.

<CardGroup cols={2}>
  <Card title="Open" icon="circle-dot">
    The ticket has been created and is waiting to be picked up by an agent. SLA first-response timer is active.
  </Card>

  <Card title="In Progress" icon="circle-half-stroke">
    An agent is actively working on the issue. The first-response SLA is paused; the resolution timer continues.
  </Card>

  <Card title="Pending" icon="clock">
    The team is waiting for a response from the requester or a third party. SLA timer can be paused during this state if configured.
  </Card>

  <Card title="Resolved" icon="circle-check">
    The issue has been addressed. The requester receives a notification and can reopen the ticket within the configured reopen window.
  </Card>
</CardGroup>

After **Resolved**, a ticket moves to **Closed** automatically after the reopen window expires (default: 48 hours), or immediately if an agent manually closes it. The full flow is:

```text theme={null}
Open → In Progress → Pending → Resolved → Closed
```

Any ticket in **Resolved** status can be **Reopened** — which returns it to **Open** and restarts the relevant SLA timers.

## Updating a Ticket

You can update any field on a ticket directly from the ticket detail view. Changes are saved automatically and appear in the activity log.

<Tabs>
  <Tab title="Reassign">
    <Steps>
      <Step title="Open the ticket">
        Click the ticket subject from the queue or search results to open the detail view.
      </Step>

      <Step title="Change the assignee">
        In the right-side **Details** panel, click the **Assignee** field and start typing an agent's name or select a team from the dropdown.
      </Step>

      <Step title="Confirm the change">
        The new assignee is saved instantly. They receive an in-app notification and email alert. The previous assignee also receives a handoff notification if that setting is enabled in your workspace.
      </Step>
    </Steps>
  </Tab>

  <Tab title="Change Priority">
    <Steps>
      <Step title="Open the ticket detail view">
        Navigate to the ticket you want to update.
      </Step>

      <Step title="Update the Priority field">
        In the **Details** panel, click the **Priority** dropdown and select the new severity level: `Urgent`, `High`, `Medium`, or `Low`.
      </Step>

      <Step title="Confirm the SLA impact">
        Changing priority re-evaluates the ticket against the new priority's SLA targets. If the ticket is already close to a breach threshold, FusionDesk will surface a warning before saving.
      </Step>
    </Steps>
  </Tab>

  <Tab title="Add Internal Note">
    <Steps>
      <Step title="Open the reply composer">
        At the bottom of the ticket thread, click the **Note** tab (as opposed to **Reply**).
      </Step>

      <Step title="Write your note">
        Type your internal message. Notes support markdown formatting, @mentions to notify specific agents, and file attachments.
      </Step>

      <Step title="Post the note">
        Click **Add Note**. The note is visible only to agents — it will never be shown to the ticket requester.
      </Step>
    </Steps>
  </Tab>

  <Tab title="Add Public Reply">
    <Steps>
      <Step title="Open the reply composer">
        At the bottom of the ticket thread, make sure the **Reply** tab is selected.
      </Step>

      <Step title="Compose your message">
        Write your response to the requester. You can use saved reply templates by typing `/` to trigger the template search.
      </Step>

      <Step title="Send the reply">
        Click **Send Reply**. The requester receives the message by email, and the ticket status automatically moves to **Pending** while you await their response.
      </Step>
    </Steps>
  </Tab>
</Tabs>

## Updating Tickets via API

You can update any field on a ticket programmatically using the `PUT /tickets/{id}` endpoint. Send only the fields you want to change — any fields you omit remain unchanged.

<CodeGroup>
  ```bash cURL theme={null}
  curl --request PUT \
    --url https://api.fusiondesk.in/v1/tickets/tkt_xyz789 \
    --header 'Authorization: Bearer <your_api_token>' \
    --header 'Content-Type: application/json' \
    --data '{
      "status": "in_progress",
      "priority": "urgent",
      "assignee_id": "usr_def456"
    }'
  ```

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

  url = "https://api.fusiondesk.in/v1/tickets/tkt_xyz789"
  headers = {
      "Authorization": "Bearer <your_api_token>",
      "Content-Type": "application/json"
  }
  payload = {
      "status": "in_progress",
      "priority": "urgent",
      "assignee_id": "usr_def456"
  }

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

  ```js Node.js theme={null}
  const response = await fetch("https://api.fusiondesk.in/v1/tickets/tkt_xyz789", {
    method: "PUT",
    headers: {
      "Authorization": "Bearer <your_api_token>",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      status: "in_progress",
      priority: "urgent",
      assignee_id: "usr_def456"
    })
  });

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

A successful response returns the full updated ticket object with a `200 OK` status.

## Merging Duplicate Tickets

When multiple tickets describe the same issue — for example, several users reporting the same outage — you can merge them into a single primary ticket to avoid duplicated effort.

<Steps>
  <Step title="Open the primary ticket">
    Open the ticket you want to keep as the primary record. This is usually the oldest or most detailed ticket on the issue.
  </Step>

  <Step title="Click Actions → Merge">
    In the ticket detail view, click the **Actions** menu (three-dot icon) in the top-right corner, then select **Merge Ticket**.
  </Step>

  <Step title="Search for the duplicate">
    In the merge dialog, search for the duplicate ticket by ID, subject, or requester name. You can merge up to 10 tickets into one at a time.
  </Step>

  <Step title="Confirm the merge">
    Review which ticket will be the primary and which will be closed as a duplicate, then click **Merge**. All replies, notes, attachments, and activity history from the duplicate are appended to the primary ticket. The duplicate ticket is marked **Closed (Merged)** and its requester receives a notification linking them to the primary ticket.
  </Step>
</Steps>

<Note>
  Merging is permanent. Once two tickets are merged, they cannot be unmerged. Take a moment to confirm the correct primary ticket before proceeding.
</Note>

## Closing and Reopening Tickets

**To close a ticket manually**, open the ticket detail view, click the **Status** dropdown in the Details panel, and select **Closed**. You can optionally add a closing note to explain the resolution.

**To reopen a closed ticket**, open the ticket and click **Reopen** in the status bar at the top of the detail view. The ticket returns to **Open** status, a new SLA timer starts, and the assigned agent receives a notification. Use the **Description** field or an internal note to explain why the ticket is being reopened so the agent has full context.

<Info>
  Requesters can reopen their own tickets via the customer portal or by replying to a resolution email — as long as the ticket is still within the reopen window defined in your workspace settings.
</Info>

## Filtering and Searching Tickets

FusionDesk's queue view supports both quick filters and an advanced filter builder to help you find exactly the tickets you need.

**Quick filters** are available in the left sidebar of the Tickets view:

* **My Open Tickets** — tickets assigned to you with an Open or In Progress status
* **Unassigned** — tickets with no assignee
* **Due Today** — tickets whose SLA resolution deadline falls today
* **Overdue** — tickets that have already breached their SLA

**Advanced filters** let you combine multiple conditions. Click **Add Filter** above the ticket list to build a query using any combination of:

| Filter         | Available Values                                                             |
| -------------- | ---------------------------------------------------------------------------- |
| **Status**     | Open, In Progress, Pending, Resolved, Closed                                 |
| **Priority**   | Urgent, High, Medium, Low                                                    |
| **Assignee**   | Any agent or team in your workspace                                          |
| **Date Range** | Created at, Updated at, Resolved at — with relative or absolute date pickers |
| **Tags**       | One or more tag values                                                       |
| **Requester**  | Name or email address                                                        |
| **SLA Status** | On track, At risk, Breached                                                  |

Save any filter combination as a **View** by clicking **Save as View** after building your query. Saved views appear in the left sidebar for quick one-click access and can be shared with your entire team.

You can also retrieve filtered ticket lists programmatically using the `GET /tickets` endpoint. The following query returns all open, high-priority tickets assigned to a specific agent:

```bash cURL theme={null}
curl --request GET \
  --url 'https://api.fusiondesk.in/v1/tickets?status=open&priority=high&assignee_id=usr_abc123&page=1&limit=25' \
  --header 'Authorization: Bearer <your_api_token>'
```
