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

# List cached Twitter writing style profiles

> List cached Twitter writing-style profiles for one Xquik account. Read every X username, analyzed tweet count, ownership flag, and cache fetch timestamp.

<Panel>
  <Tabs defaultTabIndex={0} sync={false}>
    <Tab title="200" id="response-styles-list-200">
      ```json theme={null}
      {
        "styles": [],
        "hasMore": false
      }
      ```
    </Tab>

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

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

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

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

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

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

  response = requests.get(
      "https://xquik.com/api/v1/styles",
      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() {
      req, err := http.NewRequest("GET", "https://xquik.com/api/v1/styles", 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>

## List cached Twitter writing styles

Call this endpoint to list the writing-style profiles in one Xquik
account. Each item summarizes one cached X username or custom label. The list does not include
tweet text, tone analysis, vocabulary, or engagement metrics.

An empty response is valid:

```json theme={null}
{
  "styles": []
}
```

An empty `styles` array means this Xquik account has no cached profiles. Use
[Analyze & Cache Style](/api-reference/styles/analyze) to create one.

## Read each writing style summary

| Field | Meaning | Integration use |
| - | - | - |
| `xUsername` | Normalized X username for the cached profile | Build Get, Delete, Compare, or Performance requests. |
| `tweetCount` | Number of tweet samples stored in this profile | Show the sample size. |
| `isOwnAccount` | Whether the profile represents the authenticated user's X account | Label owned and external profile samples. |
| `fetchedAt` | ISO 8601 time when Xquik fetched the tweet samples | Decide whether to refresh the cache. |

Do not interpret `tweetCount` as the X profile's lifetime tweet total. It only
counts the tweet samples stored for this writing-style profile.

`fetchedAt` records the cache fetch time. It is not a tweet publication time,
profile update time, or writing-style creation timestamp.

## Choose the next style request

Use the summary fields to choose the next endpoint:

| Goal | Next request | Input from this response |
| - | - | - |
| Inspect sampled tweet text | [Get Style](/api-reference/styles/get) | Pass `xUsername` in `{id}`. |
| Refresh stale samples | [Analyze & Cache Style](/api-reference/styles/analyze) | Send `xUsername` as `username`. |
| Compare 2 account voices | [Compare Styles](/api-reference/styles/compare) | Send 2 cached usernames. |
| Refresh likes, replies, reposts, and views | [Analyze Performance](/api-reference/styles/performance) | Pass `xUsername` in `{id}`. |
| Remove a cached profile | [Delete Style](/api-reference/styles/delete) | Pass `xUsername` in `{id}`. |

The response pages by cursor. When `hasMore` is `true`, pass `nextCursor` as
`cursor` for the next page. Do not invent `page` or `total` fields.

## Handle list style errors

| Status | Meaning | Recovery |
| - | - | - |
| `200` | The style summary list is available | Read `styles`, including an empty array. |
| `401` | Authentication failed | Replace the missing or invalid credential. |
| `429` | The request exceeded the rate limit | Wait for `Retry-After`, then retry once. |

### Does list styles return the analyzed tweets?

No. This endpoint returns summaries only. Use [Get Style](/api-reference/styles/get)
to retrieve the stored tweet samples for one username.

### Why is the Twitter writing style list empty?

The authenticated Xquik account has no cached profiles. Analyze an X username
first, then call this endpoint again with the same Xquik credentials.

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

## 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="styles" type="object[]">
  Array of cached style summaries.
  **Style object fields.**

  <ResponseField name="xUsername" type="string">
    Normalized X username.
  </ResponseField>

  <ResponseField name="tweetCount" type="number">
    Number of cached tweets.
  </ResponseField>

  <ResponseField name="fetchedAt" type="string">
    ISO 8601 timestamp when Xquik fetched the tweets.
  </ResponseField>

  <ResponseField name="isOwnAccount" type="boolean">
    Whether this is the authenticated user's own X account.
  </ResponseField>
</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}
{
  "styles": [
    {
      "xUsername": "elonmusk",
      "tweetCount": 20,
      "fetchedAt": "2026-02-24T10:30:00.000Z",
      "isOwnAccount": false
    },
    {
      "xUsername": "sama",
      "tweetCount": 18,
      "fetchedAt": "2026-02-25T14:00:00.000Z",
      "isOwnAccount": false
    }
  ],
  "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": "Missing or invalid API key" }
```

Missing or invalid API key.

### 429 Rate limited

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

Too many requests. Wait for the `Retry-After` header before retrying.

<Note>
  **Related.** [Analyze & Cache Style](/api-reference/styles/analyze) to add a new style, [Get Style](/api-reference/styles/get) to fetch full tweet data for a specific style, or [Compare Styles](/api-reference/styles/compare) to compare 2 cached styles.
</Note>


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