## List quick replies

`GET /v1/openline-configs/:lineId/quick-replies`

Returns an Open Channel's quick replies together with its sections and the key user's permissions to view and create replies. Use the method to find a reply by text, get a reply ID to edit it, or get a section ID to create a reply.

The generic `filter` parameter is not applied by this endpoint. By default, the API preserves the previous HTTP 200 response and data, adds `Warning: 299 - "filter is not supported on this endpoint and was ignored"`, and records unsupported-filter use in the server log.

## Parameters

| Parameter | Type | Required | Default | Description |
|----------|-----|:-----:|-----------|----------|
| `lineId` (path) | integer | yes | — | Open Channel ID. List: [`GET /v1/openline-configs`](/docs/openlines/config/list) |
| `search` (query) | string | no | — | Search string matched against the reply name and text |
| `sectionId` (query) | integer | no | — | ID of a section of this channel from `data.sections`. Returns only the replies in this section |
| `offset` (query) | integer | no | `0` | How many records to skip from the start of the result set |
| `limit` (query) | integer | no | `50` | How many records to return, from `0` to `50`. A value above `50` is reduced to `50`. With `0` the `replies` array is empty, while `totalCount`, `sections` and `permissions` are returned |

**Pagination.** One call returns at most 50 replies. To read all of them, increase `offset` by the number of records received until `offset` plus the length of `replies` reaches `totalCount`.

## Examples

### curl — personal key

```bash
curl "https://vibecode.bitrix24.com/v1/openline-configs/3/quick-replies?limit=20" \
  -H "X-Api-Key: YOUR_API_KEY"
```

### curl — OAuth application

```bash
curl "https://vibecode.bitrix24.com/v1/openline-configs/3/quick-replies?limit=20" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"
```

### JavaScript — personal key

```javascript
const res = await fetch(
  'https://vibecode.bitrix24.com/v1/openline-configs/3/quick-replies?limit=20',
  { headers: { 'X-Api-Key': 'YOUR_API_KEY' } }
)
const { data } = await res.json()
console.log(`Replies: ${data.totalCount}`, data.replies)
```

### JavaScript — OAuth application

```javascript
const res = await fetch(
  'https://vibecode.bitrix24.com/v1/openline-configs/3/quick-replies?limit=20',
  {
    headers: {
      'X-Api-Key': 'YOUR_APP_KEY',
      'Authorization': 'Bearer USER_SESSION_TOKEN',
    },
  }
)
const { data } = await res.json()
console.log(`Replies: ${data.totalCount}`, data.replies)
```

## Response fields

| Field | Type | Description |
|------|-----|----------|
| `success` | boolean | `true` on success |
| `data.replies` | array | Quick replies on the current page of the result set |
| `data.replies[].id` | integer | Quick reply ID |
| `data.replies[].name` | string | Reply name |
| `data.replies[].text` | string | Reply text |
| `data.replies[].sectionId` | integer | Section ID. `0` means the reply has no section |
| `data.replies[].canEdit` | boolean | Whether the key user can edit the reply |
| `data.replies[].rating` | number \| string | Reply rating |
| `data.sections` | array | All quick reply sections of this channel |
| `data.sections[].id` | integer | Section ID. Passed in `sectionId` |
| `data.sections[].name` | string | Section name |
| `data.sections[].code` | string | Section symbolic code |
| `data.totalCount` | integer | How many replies match `search` and `sectionId`, regardless of `offset` and `limit` |
| `data.permissions.canView` | boolean | Whether the key user can view the channel's quick replies. With `false`, an empty `replies` array does not mean the channel has no replies |
| `data.permissions.canCreate` | boolean | Whether the key user can create quick replies in the channel |

## Response example

```json
{
  "success": true,
  "data": {
    "replies": [
      {
        "id": 7277,
        "name": "Hello, an operator will reply within a minute",
        "text": "Hello, an operator will reply within a minute",
        "sectionId": 123,
        "canEdit": true,
        "rating": 1
      },
      {
        "id": 7279,
        "name": "Delivery within the city takes one to two business days",
        "text": "Delivery within the city takes one to two business days",
        "sectionId": 0,
        "canEdit": true,
        "rating": 1
      }
    ],
    "sections": [
      { "id": 123, "name": "Greeting", "code": "GREETING" },
      { "id": 125, "name": "Payment", "code": "PAYMENT" },
      { "id": 127, "name": "Delivery", "code": "DELIVERY" },
      { "id": 129, "name": "General", "code": "COMMON" }
    ],
    "totalCount": 2,
    "permissions": {
      "canView": true,
      "canCreate": true
    }
  }
}
```

## Error response example

404 — there is no Open Channel with this `lineId`:

```json
{
  "success": false,
  "error": {
    "code": "ENTITY_NOT_FOUND",
    "message": "Record not found"
  }
}
```

## Errors

| HTTP | Code | Description |
|------|-----|----------|
| 200 | `Warning: 299` | The filter is ignored by default; previous data is preserved and the warning is sent in the `Warning` header. |
| 400 (strict mode only) | `UNSUPPORTED_FILTER` | The server mode is disabled by default; until it is enabled, the endpoint preserves HTTP 200 and the previous data. |
| 400 | `INVALID_PARAMS` | `lineId` is not a positive integer |
| 400 | `INVALID_PARAMS` | `offset` or `limit` is negative or not an integer, or `search` is not a string |
| 400 | `INVALID_PARAMS` | `sectionId` is not a non-negative integer |
| 400 | `INVALID_PARAMS` | A query string parameter is passed twice or in object form, for example `search=a&search=b` or `search[x]=a` |
| 401 | `MISSING_API_KEY` | The `X-Api-Key` header was not passed |
| 401 | `TOKEN_MISSING` | The key has no valid authorization in Bitrix24 |
| 403 | `SCOPE_DENIED` | The key lacks the `imopenlines` scope |
| 403 | `BITRIX_ACCESS_DENIED` | Bitrix24 denied access to the key user |
| 404 | `ENTITY_NOT_FOUND` | There is no Open Channel with this `lineId` |
| 422 | `BITRIX_ERROR` | Bitrix24 returned an error. The text is in `message` |
| 429 | `RATE_LIMITED` | The method's own limit was exceeded. The overall platform ceiling is 120 requests per minute per portal and is split across platform replicas, so the code may arrive before the 120th request. The effective value is in the `x-ratelimit-limit` header |
| 502 | `OPENLINE_OPERATOR_FAILED` | Bitrix24 returned a response of an unexpected shape |
| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 is unavailable |
| 503 | `BITRIX_TIMEOUT` | Bitrix24 did not respond in time. A read is safe to retry |

Full list of common API errors — [Errors](/docs/errors).

## Known specifics

**Each channel has its own sections and replies.** `data.sections` lists only the sections of the channel from the path, and passing another channel's section ID in `sectionId` returns no replies here. Filtering by a non-existent section returns an empty `replies` array with `totalCount: 0`, not an error.

## See also

- [Create a quick reply](/docs/openlines/quick-replies/create)
- [Update a quick reply](/docs/openlines/quick-replies/update)
- [Delete a quick reply](/docs/openlines/quick-replies/delete)
- [Open Channel quick replies](/docs/openlines/quick-replies)
- [List Open Channel configurations](/docs/openlines/config/list)
