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

# List Threads

> Retrieve a paginated list of inbox reply threads.

## Query Parameters

<ParamField query="page" type="integer" default="1">
  Page number (starts at 1).
</ParamField>

<ParamField query="pageSize" type="integer" default="20">
  Number of threads per page (1-100).
</ParamField>

<ParamField query="category" type="string">
  Filter by AI category: `interested`, `not_interested`, `out_of_office`, `uncategorized`, `unknown`, or `bounce`.
</ParamField>

<ParamField query="search" type="string">
  Search across sender email, subject, and body text.
</ParamField>

## Response

<ResponseField name="data" type="array">
  Array of thread objects.

  <Expandable title="Thread object">
    <ResponseField name="id" type="string">Unique reply identifier.</ResponseField>
    <ResponseField name="fromEmail" type="string">Sender's email address.</ResponseField>
    <ResponseField name="toEmail" type="string">Recipient email address.</ResponseField>
    <ResponseField name="subject" type="string">Email subject line.</ResponseField>
    <ResponseField name="bodyPreview" type="string">First 200 characters of the plain-text body.</ResponseField>
    <ResponseField name="category" type="string">AI-assigned category: `interested`, `not_interested`, `out_of_office`, `uncategorized`, `unknown`, or `bounce`.</ResponseField>
    <ResponseField name="isRead" type="boolean">Whether the thread has been marked as read.</ResponseField>
    <ResponseField name="isStarred" type="boolean">Whether the thread is starred.</ResponseField>
    <ResponseField name="receivedAt" type="string">ISO 8601 timestamp when the reply was received.</ResponseField>
    <ResponseField name="leadId" type="string">Associated lead ID, if matched.</ResponseField>
    <ResponseField name="campaignId" type="string">Associated campaign ID, if matched.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="meta" type="object">
  Pagination metadata.

  <Expandable title="Meta object">
    <ResponseField name="page" type="integer">Current page number.</ResponseField>
    <ResponseField name="pageSize" type="integer">Items per page.</ResponseField>
    <ResponseField name="total" type="integer">Total number of threads.</ResponseField>
    <ResponseField name="totalPages" type="integer">Total number of pages.</ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET "https://api.foxreach.io/api/v1/inbox/threads?page=1&pageSize=20&category=interested" \
    -H "X-API-Key: otr_your_key"
  ```

  ```python Python SDK theme={null}
  from foxreach import FoxReach

  client = FoxReach(api_key="otr_your_key")
  threads = client.inbox.list_threads(is_read=False, page_size=20)
  ```

  ```typescript TypeScript SDK theme={null}
  import { FoxReach } from "foxreach";

  const client = new FoxReach({ apiKey: "otr_your_key" });
  const threads = await client.inbox.listThreads({ isRead: false, pageSize: 20 });
  ```
</RequestExample>

<ResponseExample>
  ```json theme={null}
  {
    "data": [
      {
        "id": "rpl_abc123",
        "fromEmail": "john@acme.com",
        "toEmail": "outreach@yourcompany.com",
        "subject": "Re: Quick question about your product",
        "bodyPreview": "Hi, thanks for reaching out! I'd love to learn more about...",
        "category": "interested",
        "isRead": false,
        "isStarred": false,
        "receivedAt": "2025-01-20T14:30:00",
        "leadId": "cld_xyz789",
        "campaignId": "cmp_def456"
      }
    ],
    "meta": {
      "page": 1,
      "pageSize": 20,
      "total": 1,
      "totalPages": 1
    }
  }
  ```
</ResponseExample>

## Rate Limit

* **100 requests per minute, per API key.** Fixed 60-second window.
* Every response includes `X-RateLimit-Limit`, `X-RateLimit-Remaining`, and `X-RateLimit-Reset` (unix epoch seconds).
* A `429` response includes a `Retry-After` header (seconds until the bucket resets).

For client-side patterns (`Retry-After`, exponential backoff, monitoring `X-RateLimit-Remaining`), see [Rate Limiting](/rate-limiting).
