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

# List Q&As

> GET /v1/knowledge/qa — list your knowledge base Q&As with cursor pagination

Returns a paginated list of the Q\&A entries in your organization's knowledge base — the question/answer pairs your AI agents draw on when replying. Results are ordered by `createdAt` ascending with a stable tiebreak, so paging through every page is a consistent full export.

```http theme={null}
GET /v1/knowledge/qa
```

## Authentication

Bearer token in the `Authorization` header. See [Authentication](/api-reference/authentication).

```http theme={null}
Authorization: Bearer rfl_live_...
```

## Query parameters

<ParamField query="limit" type="integer" default="20">
  Number of Q\&As per page. Range `1`–`100`.
</ParamField>

<ParamField query="startingAfter" type="string">
  Opaque cursor from the previous response's `nextCursor`. See [Pagination](/api-reference/pagination).
</ParamField>

## Response

Returns a [list envelope](/api-reference/pagination#response-shape) containing `Qa` objects.

### The Qa object

<ResponseField name="id" type="string">
  Unique identifier. Treat it as opaque.
</ResponseField>

<ResponseField name="object" type="string">
  Always `"qa"`.
</ResponseField>

<ResponseField name="question" type="string">
  The primary phrasing of the question.
</ResponseField>

<ResponseField name="questionVariations" type="string[]">
  Alternative phrasings of the same question, sorted alphabetically. Empty when
  only the primary phrasing exists.
</ResponseField>

<ResponseField name="answer" type="string">
  The answer content.
</ResponseField>

<ResponseField name="agentId" type="string | null">
  ID of the AI agent this Q\&A is scoped to, prefixed with `agent_`. `null`
  when the Q\&A applies to every agent in the organization.
</ResponseField>

<ResponseField name="createdAt" type="string">
  ISO 8601 UTC timestamp of Q\&A creation.
</ResponseField>

<ResponseField name="updatedAt" type="string">
  ISO 8601 UTC timestamp of the most recent update.
</ResponseField>

## Examples

### List Q\&As

<CodeGroup>
  ```bash curl theme={null}
  curl "https://api.replyful.com/v1/knowledge/qa?limit=5" \
    -H "Authorization: Bearer rfl_live_..."
  ```

  ```ts Node.js theme={null}
  const res = await fetch(
    "https://api.replyful.com/v1/knowledge/qa?limit=5",
    { headers: { Authorization: `Bearer ${process.env.REPLYFUL_API_KEY}` } },
  );
  const { data } = await res.json();
  ```

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

  res = requests.get(
      "https://api.replyful.com/v1/knowledge/qa",
      headers={"Authorization": f"Bearer {os.environ['REPLYFUL_API_KEY']}"},
      params={"limit": 5},
  )
  res.raise_for_status()
  data = res.json()["data"]
  ```
</CodeGroup>

```json Response theme={null}
{
  "object": "list",
  "data": [
    {
      "id": "V1StGXR8Z5jdHi6BmyT",
      "object": "qa",
      "question": "How do I reset my password?",
      "questionVariations": [
        "Forgot my password",
        "I can't log in"
      ],
      "answer": "Click **Forgot password** on the login page and follow the emailed link.",
      "agentId": "agent_9dKmT3xWq6bYrN8",
      "createdAt": "2026-04-29T14:30:00Z",
      "updatedAt": "2026-04-29T14:32:00Z"
    }
  ],
  "hasMore": true,
  "nextCursor": "eyJzIjoiMjAyNi0wNC0yOVQxNDozMDowMC4wMDBaIiwiaSI6IlYxU3RHWFI4WjVqZEhpNkJteVQifQ",
  "url": "/v1/knowledge/qa"
}
```

### Walk every page

See the [pagination guide](/api-reference/pagination#walking-through-every-page) for a copy-paste loop in Node and Python.

## Error responses

| Status | `error.code`              | When                                                                       |
| ------ | ------------------------- | -------------------------------------------------------------------------- |
| `401`  | `missing_api_key`         | The `Authorization` header is absent.                                      |
| `401`  | `invalid_api_key`         | The token is malformed, unknown, or archived.                              |
| `422`  | `invalid_query_parameter` | A query parameter failed validation. The `param` field names the offender. |
| `422`  | `invalid_cursor`          | The `startingAfter` cursor could not be decoded.                           |
| `429`  | `too_many_requests`       | Rate limit exceeded. Honor `Retry-After`.                                  |

See [Errors](/api-reference/errors) for the full error envelope reference.
