> ## 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.

# FusionDesk Tickets API — Create, Update & Delete

> Create, retrieve, update, and delete support tickets with the FusionDesk REST API. Manage status, priority, assignees, and SLA fields programmatically.

The Tickets API gives you full programmatic control over every support ticket in your FusionDesk workspace. Use it to automate triage workflows, sync ticket state with external systems, bulk-import historical cases, or build custom dashboards — all over standard HTTPS with JSON bodies.

<Note>
  All requests must include the `Authorization: Bearer fd_live_xxxxxxxxxxxxxxxxxxxx` header. Requests without a valid API key return `401 Unauthorized`.
</Note>

***

## GET /tickets

Retrieve a paginated list of tickets across your workspace. Apply query parameters to narrow results by status, priority, or assignee.

<ParamField query="status" type="string">
  Filter by ticket status. Accepted values: `open`, `in_progress`, `resolved`, `closed`.
</ParamField>

<ParamField query="priority" type="string">
  Filter by priority level. Accepted values: `low`, `medium`, `high`, `urgent`.
</ParamField>

<ParamField query="assignee_id" type="string">
  Return only tickets assigned to the specified user ID.
</ParamField>

<ParamField query="page" type="integer" default="1">
  Page number for paginated results.
</ParamField>

<ParamField query="limit" type="integer" default="25">
  Number of tickets per page. Maximum value is `100`.
</ParamField>

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET "https://api.fusiondesk.in/v1/tickets?status=open&priority=high&page=1&limit=25" \
    -H "Authorization: Bearer fd_live_xxxxxxxxxxxxxxxxxxxx" \
    -H "Content-Type: application/json"
  ```

  ```json Response theme={null}
  {
    "data": [
      {
        "id": "tkt_01HZ8MXKPQ3R7VWYTBN6CDSF",
        "subject": "Login page returns 500 error",
        "description": "Users are unable to log in via SSO. The login page throws a 500 error after credentials are submitted.",
        "status": "open",
        "priority": "high",
        "assignee_id": "usr_04ABCDEF1234",
        "tags": ["sso", "auth", "bug"],
        "created_at": "2025-06-01T09:15:00Z",
        "updated_at": "2025-06-02T11:42:00Z"
      }
    ],
    "meta": {
      "page": 1,
      "limit": 25,
      "total": 134
    }
  }
  ```
</CodeGroup>

<ResponseField name="data" type="array">
  Array of ticket objects matching the applied filters.

  <Expandable title="Ticket object fields">
    <ResponseField name="id" type="string">Unique identifier for the ticket.</ResponseField>
    <ResponseField name="subject" type="string">Short summary of the issue.</ResponseField>
    <ResponseField name="description" type="string">Full details of the issue.</ResponseField>
    <ResponseField name="status" type="string">Current ticket status: `open`, `in_progress`, `resolved`, or `closed`.</ResponseField>
    <ResponseField name="priority" type="string">Priority level: `low`, `medium`, `high`, or `urgent`.</ResponseField>
    <ResponseField name="assignee_id" type="string">ID of the agent assigned to this ticket. `null` if unassigned.</ResponseField>
    <ResponseField name="tags" type="array">List of tag strings associated with the ticket.</ResponseField>
    <ResponseField name="created_at" type="string">ISO 8601 timestamp of when the ticket was created.</ResponseField>
    <ResponseField name="updated_at" type="string">ISO 8601 timestamp of the most recent update.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="meta.page" type="integer">Current page number.</ResponseField>
<ResponseField name="meta.limit" type="integer">Number of results per page.</ResponseField>
<ResponseField name="meta.total" type="integer">Total number of tickets matching the query.</ResponseField>

***

## POST /tickets

Create a new support ticket in your workspace. You must supply a `subject` and `description`; all other fields are optional and fall back to sensible defaults.

<ParamField body="subject" type="string" required>
  A concise summary of the issue. Maximum 255 characters.
</ParamField>

<ParamField body="description" type="string" required>
  Full details of the issue. Supports plain text or Markdown.
</ParamField>

<ParamField body="priority" type="string" default="medium">
  Priority level for the ticket. Accepted values: `low`, `medium`, `high`, `urgent`.
</ParamField>

<ParamField body="assignee_id" type="string">
  ID of the agent to assign the ticket to on creation. Leave blank to create an unassigned ticket.
</ParamField>

<ParamField body="tags" type="array">
  Array of tag strings to attach to the ticket (e.g., `["billing", "urgent-customer"]`).
</ParamField>

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.fusiondesk.in/v1/tickets" \
    -H "Authorization: Bearer fd_live_xxxxxxxxxxxxxxxxxxxx" \
    -H "Content-Type: application/json" \
    -d '{
      "subject": "Payment gateway timeout on checkout",
      "description": "Customers report a timeout error when completing purchases over $500. Issue started after the June 3rd deployment.",
      "priority": "urgent",
      "assignee_id": "usr_04ABCDEF1234",
      "tags": ["payments", "checkout", "regression"]
    }'
  ```

  ```json Response theme={null}
  {
    "data": {
      "id": "tkt_02JK9NYLRQ4S8WXZUCN7DETG",
      "subject": "Payment gateway timeout on checkout",
      "description": "Customers report a timeout error when completing purchases over $500. Issue started after the June 3rd deployment.",
      "status": "open",
      "priority": "urgent",
      "assignee_id": "usr_04ABCDEF1234",
      "tags": ["payments", "checkout", "regression"],
      "created_at": "2025-06-04T14:05:22Z",
      "updated_at": "2025-06-04T14:05:22Z"
    }
  }
  ```
</CodeGroup>

<ResponseField name="data" type="object">
  The newly created ticket object. See the field definitions under [GET /tickets](#get-tickets) for details.
</ResponseField>

<Tip>
  After creating a ticket, you can immediately update its SLA target or link it to a project using the respective API endpoints.
</Tip>

***

## GET /tickets/\{id}

Fetch the full details of a single ticket by its unique ID.

<ParamField path="id" type="string" required>
  The unique ticket ID (e.g., `tkt_01HZ8MXKPQ3R7VWYTBN6CDSF`).
</ParamField>

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET "https://api.fusiondesk.in/v1/tickets/tkt_01HZ8MXKPQ3R7VWYTBN6CDSF" \
    -H "Authorization: Bearer fd_live_xxxxxxxxxxxxxxxxxxxx" \
    -H "Content-Type: application/json"
  ```

  ```json Response theme={null}
  {
    "data": {
      "id": "tkt_01HZ8MXKPQ3R7VWYTBN6CDSF",
      "subject": "Login page returns 500 error",
      "description": "Users are unable to log in via SSO. The login page throws a 500 error after credentials are submitted.",
      "status": "in_progress",
      "priority": "high",
      "assignee_id": "usr_04ABCDEF1234",
      "tags": ["sso", "auth", "bug"],
      "created_at": "2025-06-01T09:15:00Z",
      "updated_at": "2025-06-03T08:30:00Z"
    }
  }
  ```
</CodeGroup>

<ResponseField name="data" type="object">
  Full ticket object for the requested ID. Returns `404 Not Found` if the ticket does not exist or belongs to a different workspace.
</ResponseField>

***

## PUT /tickets/\{id}

Update one or more fields on an existing ticket. Only the fields you include in the request body are changed; omitted fields retain their current values.

<ParamField path="id" type="string" required>
  The unique ID of the ticket to update.
</ParamField>

<ParamField body="subject" type="string">
  Updated summary of the issue.
</ParamField>

<ParamField body="description" type="string">
  Updated full description of the issue.
</ParamField>

<ParamField body="priority" type="string">
  New priority level. Accepted values: `low`, `medium`, `high`, `urgent`.
</ParamField>

<ParamField body="status" type="string">
  New status. Accepted values: `open`, `in_progress`, `resolved`, `closed`.
</ParamField>

<ParamField body="assignee_id" type="string">
  ID of the agent to reassign the ticket to. Pass `null` to unassign.
</ParamField>

<ParamField body="tags" type="array">
  Full replacement list of tags. This overwrites the existing tag array.
</ParamField>

<CodeGroup>
  ```bash cURL theme={null}
  curl -X PUT "https://api.fusiondesk.in/v1/tickets/tkt_01HZ8MXKPQ3R7VWYTBN6CDSF" \
    -H "Authorization: Bearer fd_live_xxxxxxxxxxxxxxxxxxxx" \
    -H "Content-Type: application/json" \
    -d '{
      "status": "resolved",
      "priority": "medium",
      "tags": ["sso", "auth", "bug", "resolved-in-v2.4"]
    }'
  ```

  ```json Response theme={null}
  {
    "data": {
      "id": "tkt_01HZ8MXKPQ3R7VWYTBN6CDSF",
      "subject": "Login page returns 500 error",
      "description": "Users are unable to log in via SSO. The login page throws a 500 error after credentials are submitted.",
      "status": "resolved",
      "priority": "medium",
      "assignee_id": "usr_04ABCDEF1234",
      "tags": ["sso", "auth", "bug", "resolved-in-v2.4"],
      "created_at": "2025-06-01T09:15:00Z",
      "updated_at": "2025-06-04T16:22:11Z"
    }
  }
  ```
</CodeGroup>

<ResponseField name="data" type="object">
  The full, updated ticket object reflecting all applied changes.
</ResponseField>

***

## DELETE /tickets/\{id}

Permanently delete a ticket and all associated data. This action is irreversible.

<ParamField path="id" type="string" required>
  The unique ID of the ticket to delete.
</ParamField>

```bash theme={null}
curl -X DELETE "https://api.fusiondesk.in/v1/tickets/tkt_01HZ8MXKPQ3R7VWYTBN6CDSF" \
  -H "Authorization: Bearer fd_live_xxxxxxxxxxxxxxxxxxxx"
```

A successful deletion returns `204 No Content` with an empty response body.

<Warning>
  Deleting a ticket is permanent and cannot be undone. All comments, attachments, and activity history associated with the ticket are also removed. If you need to preserve the record, update the ticket's status to `closed` instead.
</Warning>
