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

# Support ticket API: list Xquik tickets & status

> List up to 200 Xquik support tickets in recent-update order. Review each ticket ID, subject, status, message count, creation time & latest update timestamp.

<Panel>
  <Tabs defaultTabIndex={0} sync={false}>
    <Tab title="200" id="response-support-list-200">
      ```json theme={null}
      {
        "tickets": [
          {
            "publicId": "tkt_a1b2c3d4e5f6a1b2c3d4e5f6",
            "subject": "Cannot connect X account",
            "status": "open",
            "messageCount": 2,
            "createdAt": "2025-01-15T12:00:00Z"
          }
        ],
        "hasMore": false
      }
      ```
    </Tab>

    <Tab title="400" id="response-support-list-400">
      ```json theme={null}
      {
        "error": "invalid_input",
        "message": "Invalid input. Check the request body."
      }
      ```
    </Tab>

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

    <Tab title="429" id="response-support-list-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>

## List support tickets for Xquik workflows

List the signed-in account's Xquik support tickets. Review connection failures,
tweet write errors, follower exports, monitor alerts, webhooks, or billing cases.

This endpoint returns the documented ticket summary fields. Fetch
[Get Ticket](/api-reference/support/get) when you need message bodies or
attachment metadata.

<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 \
    -H "x-api-key: xq_YOUR_KEY_HERE" | jq
  ```

  ```javascript Node.js theme={null}
  const response = await fetch("https://xquik.com/api/v1/support/tickets", {
    method: "GET",
    headers: {
      "x-api-key": "xq_YOUR_KEY_HERE",
    },
  });
  const result = await response.json();
  if (!response.ok) throw new Error(JSON.stringify(result));

  const activeTickets = result.tickets.filter((ticket) =>
    ["open", "in_progress"].includes(ticket.status),
  );
  ```

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

  response = requests.get(
      "https://xquik.com/api/v1/support/tickets",
      headers={"x-api-key": "xq_YOUR_KEY_HERE"},
  )
  result = response.json()
  response.raise_for_status()

  active_tickets = [
      ticket
      for ticket in result["tickets"]
      if ticket["status"] in {"open", "in_progress"}
  ]
  ```

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

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

  func main() {
      req, err := http.NewRequest("GET", "https://xquik.com/api/v1/support/tickets", 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>

## Read the support ticket list

Use the list as a support queue. Store ticket IDs and timestamps before
requesting any detailed history.

| Support queue column | Response field | Review rule |
| - | - | - |
| Ticket ID | `publicId` | Use this stable ID for details, replies, and status changes. |
| Reported issue | `subject` | Keep the affected Xquik workflow visible. |
| Current state | `status` | Handle open, in-progress, resolved, and closed cases separately. |
| Conversation size | `messageCount` | Compare with the previously stored count. |
| Opened time | `createdAt` | Measure the ticket's age. |
| Latest activity | `updatedAt` | Process recently changed tickets first. |

The endpoint returns up to 200 tickets. It sorts the newest `updatedAt` value
first. Pass `nextCursor` as `cursor` to read older tickets. The request has no
search or status query parameter.

Filter the returned array locally. Match `publicId`, `subject`, or `status`
without sending another list request.

## Interpret support ticket status

The support ticket API returns 4 status values. Listing tickets never changes
any status.

| Status | Meaning | Next action |
| - | - | - |
| `open` | A new ticket or user reply needs review. | Read the complete message history. |
| `in_progress` | Support has responded or continues the investigation. | Check the newest support message. |
| `resolved` | The reported workflow has a proposed resolution. | Verify the fix before reopening. |
| `closed` | The conversation is complete. | Keep the ticket ID for future reference. |

Users can set `open`, `resolved`, or `closed` through the update route. Support
sets `in_progress`. Do not invent another state in client code.

## Build a support ticket review queue

1. Call `GET /support/tickets` with one Xquik API key.
2. Save the returned `publicId` and `updatedAt` values.
3. Keep the response order for a recent-activity queue.
4. Compare each `messageCount` with your previous list.
5. Fetch ticket details when the count or timestamp changes.
6. Read each message and attachment status before replying.
7. Update the ticket only after confirming the intended state.

Use [Reply to Ticket](/api-reference/support/reply) for new investigation
details. Use [Update Ticket Status](/api-reference/support/update) for workflow
state changes. Both routes keep the existing ticket ID.

Do not create a duplicate ticket for every retry. Reuse the original
`publicId` while the subject describes the same problem.

## Triage X API and Twitter scraper problems

Keep ticket subjects specific. Name the affected tweet, follower, monitor,
webhook, X account, or billing workflow.

Useful local queue categories include:

* X account connection or reauthentication.
* Tweet creation, deletion, reply, like, or repost actions.
* Follower, following, timeline, reply, or media exports.
* Keyword monitors, account monitors, and webhook deliveries.
* API key authentication, credits, subscription checkout, or top-ups.

The list response does not explain the failure. Fetch the matching ticket
before making a product decision.

For a `429` response, wait for `Retry-After`. Reuse the last successful
list during that pause.

## Support ticket API questions

### Does the list include ticket messages?

The response returns `messageCount`, not message text. Fetch the ticket
by `publicId` to read its chronological conversation.

### Does the list include attachments?

The response omits attachment filenames, types, sizes, states, and
download URLs. Fetch the detailed ticket to inspect attachments.

### Can I search support tickets by subject?

The endpoint accepts no search query. Filter the returned ticket summaries by
`subject` in your client.

### Can I filter tickets by status?

The endpoint accepts no status query. Filter `open`, `in_progress`, `resolved`,
or `closed` after receiving the list.

### Which ticket should I read first?

Start with the first changed ticket. Results already use descending
`updatedAt` order.

### Does listing tickets consume Xquik credits?

No. Listing support tickets is free for authenticated accounts.

## Headers

<ParamField header="x-api-key" type="string">
  Your Xquik API key. Generate one from the [dashboard](https://xquik.com/dashboard).
</ParamField>

<ParamField header="Authorization" type="string">
  An OAuth bearer token formatted as `Bearer YOUR_TOKEN`. Send this header or `x-api-key`, not both.
</ParamField>

## Query parameters

<ParamField query="limit" type="integer">
  Maximum items per page: 1 to 200, default 200.
</ParamField>

<ParamField query="cursor" type="string">
  `nextCursor` from the previous page. The `after` alias also works. Offset pagination is not
  supported.
</ParamField>

## Response

### 200 OK

<ResponseField name="tickets" type="object[]">
  Array of ticket objects.
</ResponseField>

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

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

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

<ResponseField name="tickets[].messageCount" type="number">
  Total number of messages in the ticket.
</ResponseField>

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

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

<ResponseField name="hasMore" type="boolean">
  Whether more rows follow this page.
</ResponseField>

<ResponseField name="nextCursor" type="string">
  Pass it as `cursor` for the next page. Present when `hasMore` is `true`.
</ResponseField>

```json theme={null}
{
  "tickets": [
    {
      "publicId": "tkt_a1b2c3d4e5f6a1b2c3d4e5f6",
      "subject": "Cannot connect X account",
      "status": "open",
      "messageCount": 3,
      "createdAt": "2026-03-18T10:00:00Z",
      "updatedAt": "2026-03-18T12:30:00Z"
    }
  ],
  "hasMore": false
}
```

### 400 Invalid cursor

```json theme={null}
{
  "error": "invalid_input",
  "message": "Cursor invalid. Use nextCursor from the previous page, or omit it to start over."
}
```

The `cursor` is not one this list returned. Send the `nextCursor` of the previous page, or omit it.

### 401 Unauthenticated

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

Missing or invalid API key.

### 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 listing tickets again.

<Note>
  **Related.** [Create Ticket](/api-reference/support/create) to open a new ticket, or [Get Ticket](/api-reference/support/get) to fetch details and message history for a specific ticket.
</Note>


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