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

# Xquik support ticket API for request details

> Retrieve one support ticket by ID with its subject, status, complete message history, private attachments, and timestamps. Reading a ticket costs no credits.

<Panel>
  <Tabs defaultTabIndex={0} sync={false}>
    <Tab title="200" id="response-support-get-200">
      ```json theme={null}
      {
        "publicId": "tkt_a1b2c3d4e5f6a1b2c3d4e5f6",
        "subject": "Cannot connect X account",
        "status": "open",
        "createdAt": "2025-01-15T12:00:00Z",
        "updatedAt": "2025-01-16T09:30:00Z",
        "messages": [
          {
            "body": "I am unable to connect my X account.",
            "sender": "user",
            "createdAt": "2025-01-15T12:00:00Z",
            "attachments": []
          }
        ]
      }
      ```
    </Tab>

    <Tab title="401" id="response-support-get-401">
      ```json theme={null}
      {
        "error": "unauthenticated",
        "message": "Authentication required. Provide a valid API key or bearer token."
      }
      ```
    </Tab>

    <Tab title="404" id="response-support-get-404">
      ```json theme={null}
      {
        "error": "not_found",
        "message": "Resource not found."
      }
      ```
    </Tab>

    <Tab title="429" id="response-support-get-429">
      ```json theme={null}
      {
        "error": "rate_limit_exceeded",
        "message": "Too many requests. Try again later.",
        "retryAfter": 60
      }
      ```
    </Tab>
  </Tabs>
</Panel>

<blockquote className="agent-llms-directive">
  For the complete documentation index, see <a href="/llms.txt">llms.txt</a>.
</blockquote>

## When to read one ticket

Use this route when one ticket ID needs full message history. Use list for summaries across tickets. Use reply or update only when the conversation or status must change.

<Callout icon="circle-check" color="#16a34a">
  **Free.** This endpoint does not consume credits.
</Callout>

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET https://xquik.com/api/v1/support/tickets/tkt_a1b2c3d4e5f6a1b2c3d4e5f6 \
    -H "x-api-key: xq_YOUR_KEY_HERE" | jq
  ```

  ```javascript Node.js theme={null}
  const ticketId = "tkt_a1b2c3d4e5f6a1b2c3d4e5f6";
  const response = await fetch(`https://xquik.com/api/v1/support/tickets/${ticketId}`, {
    method: "GET",
    headers: {
      "x-api-key": "xq_YOUR_KEY_HERE",
    },
  });
  const data = await response.json();
  ```

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

  ticket_id = "tkt_a1b2c3d4e5f6a1b2c3d4e5f6"
  response = requests.get(
      f"https://xquik.com/api/v1/support/tickets/{ticket_id}",
      headers={"x-api-key": "xq_YOUR_KEY_HERE"},
  )
  data = response.json()
  ```

  ```go Go theme={null}
  package main

  import (
      "encoding/json"
      "fmt"
      "net/http"
  )

  func main() {
      ticketID := "tkt_a1b2c3d4e5f6a1b2c3d4e5f6"
      req, err := http.NewRequest("GET", "https://xquik.com/api/v1/support/tickets/"+ticketID, nil)
      if err != nil {
          panic(err)
      }
      req.Header.Set("x-api-key", "xq_YOUR_KEY_HERE")

      resp, err := http.DefaultClient.Do(req)
      if err != nil {
          panic(err)
      }
      defer resp.Body.Close()

      var data map[string]interface{}
      if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
          panic(err)
      }
      fmt.Println(data)
  }
  ```
</CodeGroup>

| Support ticket history column | Response source | Review rule |
| - | - | - |
| Ticket ID | `publicId` | Match the requested ticket before processing. |
| Ticket subject | `subject` | Keep the reported workflow visible. |
| Current state | `status` | Handle open, in-progress, resolved, and closed tickets separately. |
| Message author | `messages[].sender` | Separate user and support replies. |
| Message text | `messages[].body` | Keep messages in time order. |
| Attachment state | `messages[].attachments[].status` | Download only ready attachments. |
| Updated at | `updatedAt` | Stop polling after the expected state arrives. |

## Path parameters

<ParamField path="id" type="string" required>
  The ticket public ID (for example `tkt_a1b2c3d4e5f6a1b2c3d4e5f6`). Returned when you [create a ticket](/api-reference/support/create) or [list tickets](/api-reference/support/list).
</ParamField>

## Headers

<ParamField header="x-api-key" type="string" required>
  Your API key. Session cookie authentication is also supported. Generate a key from the [dashboard](https://xquik.com/dashboard).
</ParamField>

## Response

### 200 OK

<ResponseField name="publicId" type="string">
  Unique ticket public ID.
</ResponseField>

<ResponseField name="subject" type="string">
  Ticket subject.
</ResponseField>

<ResponseField name="status" type="string">
  Current status: `open`, `in_progress`, `resolved`, or `closed`.
</ResponseField>

<ResponseField name="createdAt" type="string">
  ISO 8601 creation timestamp.
</ResponseField>

<ResponseField name="updatedAt" type="string">
  ISO 8601 last update timestamp.
</ResponseField>

<ResponseField name="messages" type="object[]">
  Array of message objects in time order.
</ResponseField>

<ResponseField name="messages[].body" type="string">
  Message content.
</ResponseField>

<ResponseField name="messages[].sender" type="string">
  Who sent the message: `user` or `support`.
</ResponseField>

<ResponseField name="messages[].createdAt" type="string">
  ISO 8601 timestamp of when the sender posted the message.
</ResponseField>

<ResponseField name="messages[].attachments" type="object[]">
  Private image and video attachments.
</ResponseField>

<ResponseField name="messages[].attachments[].publicId" type="string">
  Attachment public ID.
</ResponseField>

<ResponseField name="messages[].attachments[].filename" type="string">
  Original filename.
</ResponseField>

<ResponseField name="messages[].attachments[].contentType" type="string">
  Validated media type.
</ResponseField>

<ResponseField name="messages[].attachments[].kind" type="string">
  `image` or `video`.
</ResponseField>

<ResponseField name="messages[].attachments[].sizeBytes" type="integer">
  File size in bytes.
</ResponseField>

<ResponseField name="messages[].attachments[].status" type="string">
  `ready`, `pending`, or `failed`.
</ResponseField>

<ResponseField name="messages[].attachments[].url" type="string">
  Authenticated download path.
</ResponseField>

```json theme={null}
{
  "publicId": "tkt_a1b2c3d4e5f6a1b2c3d4e5f6",
  "subject": "Cannot connect X account",
  "status": "open",
  "createdAt": "2026-03-18T10:00:00Z",
  "updatedAt": "2026-03-18T12:30:00Z",
  "messages": [
    {
      "body": "I keep getting a connection error when trying to link my account.",
      "sender": "user",
      "createdAt": "2026-03-18T10:00:00Z",
      "attachments": [
        {
          "publicId": "att_a1b2c3d4e5f6a1b2c3d4e5f6",
          "filename": "recording.mp4",
          "contentType": "video/mp4",
          "kind": "video",
          "sizeBytes": 18294386,
          "status": "ready",
          "url": "/api/v1/support/attachments/att_a1b2c3d4e5f6a1b2c3d4e5f6"
        }
      ]
    },
    {
      "body": "Could you try disconnecting and reconnecting your account from the dashboard?",
      "sender": "support",
      "createdAt": "2026-03-18T11:15:00Z"
    }
  ]
}
```

### 401 Unauthenticated

```json theme={null}
{
  "error": "unauthenticated",
  "message": "Authentication required. Provide a valid API key or bearer token."
}
```

Missing or invalid API key.

### 404 Not found

```json theme={null}
{ "error": "not_found", "message": "Resource not found." }
```

No ticket exists with this ID, or it belongs to a different account.

### 429 Rate limited

```json theme={null}
{
  "error": "rate_limit_exceeded",
  "message": "Too many requests. Try again later.",
  "retryAfter": 1
}
```

Wait for the `Retry-After` value before fetching the ticket again.

<Note>
  **Related.** [Support Media](/api-reference/support/media) explains how agents should handle attachment statuses and downloads.
</Note>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.