
## Search Open Channel configurations

`POST /v1/openline-configs/search`

Returns a list of Open Channel configurations with filtering, sorting, and pagination. Parameters are passed in the request body, which is more convenient for complex conditions than a query string.

## Request fields (body)

| Parameter | Type | Default | Allowed values | Description |
|----------|-----|-----------|---------------------|---------|
| `filter` | object | — | keys — the same 6 fields as in `sort`, values depend on the field type | Filtering by schema fields. Available fields — [`GET /v1/openline-configs/fields`](/docs/openlines/config/fields).<br>Example: `{"active": false}` |
| `limit` | number | `50` | `1`–`200` | Number of records per request |
| `offset` | number | `0` | `0` and above | Skip N records |
| `sort` | string | — | `id`, `name`, `active`, `queueType`, `workTimeFrom`, `workTimeTo` | Sort field |
| `order` | string | `asc` | `asc`, `desc` | Sort direction |

An empty request body returns all configurations — the equivalent of `GET /v1/openline-configs` with no parameters.

## Examples

### curl — personal key

```bash
curl -X POST "https://vibecode.bitrix24.com/v1/openline-configs/search" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "filter": { "active": true },
    "limit": 3,
    "sort": "id",
    "order": "desc"
  }'
```

### curl — OAuth application

```bash
curl -X POST "https://vibecode.bitrix24.com/v1/openline-configs/search" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "filter": { "active": true },
    "limit": 3,
    "sort": "id",
    "order": "desc"
  }'
```

### JavaScript — personal key

```javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/openline-configs/search', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    filter: { active: true },
    limit: 3,
    sort: 'id',
    order: 'desc',
  }),
})

const { success, data, total } = await res.json()
console.log('Found:', total, 'records, returned:', data.length)
```

### JavaScript — OAuth application

```javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/openline-configs/search', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    filter: { active: true },
    limit: 3,
    sort: 'id',
    order: 'desc',
  }),
})

const { success, data, total } = await res.json()
```

## Response fields

| Field | Type | Description |
|------|-----|---------|
| `success` | boolean | Always `true` on success |
| `data` | array | Array of configurations (all fields — see [Configuration fields](/docs/openlines/config/fields)) |
| `total` | number | Number of records on the current page. This method does not return an overall count across all configurations in the Bitrix24 account |
| `limit` | number | Applied limit on the number of records |
| `offset` | number | Applied offset |
| `hasMore` | boolean | Whether there are more records beyond `limit` |

## Response example

```json
{
  "success": true,
  "data": [
    {
      "id": 21,
      "active": true,
      "name": "Open Channel 12",
      "queueType": "all",
      "workTimeFrom": "9",
      "workTimeTo": "18.30",
      "crm": "Y",
      "crmCreate": "lead",
      "queueTime": "60",
      "noAnswerTime": "60",
      "welcomeMessage": "Y",
      "dateCreate": {},
      "dateModify": {}
    }
  ],
  "total": 3,
  "limit": 3,
  "offset": 0,
  "hasMore": true
}
```

Core fields are shown. Each array element contains ~91 fields, all in camelCase. `/fields` describes each with a `label` and `description`. Full list — [Configuration fields](/docs/openlines/config/fields).

## Error response example

400 — an `$or` / `$and` logical operator in the filter (Bitrix24 does not support these operators for this method):

```json
{
  "success": false,
  "error": {
    "code": "INVALID_FILTER_OPERATOR",
    "message": "'$or' is not supported. OR/AND logic cannot be expressed in a single openline-configs filter. For same-field OR use { field: { $in: [v1, v2] } }. For cross-field OR run parallel requests. AND is the default — combine conditions as sibling keys in one filter object."
  }
}
```

## Errors

| HTTP | Code | Description |
|------|-----|---------|
| 400 | `INVALID_FILTER_OPERATOR` | A logical operator `$or` / `$and` / `$not` / `LOGIC` was passed in the filter |
| 400 | `UNSUPPORTED_LIST_FIELD` | One of the queue fields — `queue`, `queueFull`, `queueUsersFields`, `queueOnline` — was passed in `select`, `filter` or `sort`. They come back from [Get configuration](/docs/openlines/config/get) only |
| 401 | `TOKEN_MISSING` | `X-Api-Key` was not passed |
| 403 | `SCOPE_DENIED` | The API key lacks the `imopenlines` scope |
| 422 | `BITRIX_ERROR` | A field name absent from the configuration schema was passed: a typo or a field that cannot be filtered on |

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

## Known specifics

**An empty body returns all records** — the equivalent of `GET /v1/openline-configs` with no parameters.

The remaining specifics are the same as for the list: `total` as the current-page count, paging strictly by `hasMore` (at the `limit=200` ceiling one empty response may follow the last full page), a fractional `limit` or one below `1` is replaced by the default `50`, filtering and sorting on the 6 camelCase schema fields plus other camelCase names as a fallback, OR/AND via `$or`/`$and` are not supported — use `$in`, the operator queue fields are absent from the response, and their names in `select`, `filter` or `sort` return `400 UNSUPPORTED_LIST_FIELD`. Details — [Known specifics of the list method](/docs/openlines/config/list).

## See also

- [List configurations](/docs/openlines/config/list)
- [Configuration fields](/docs/openlines/config/fields)
- [Filtering syntax](/docs/filtering)
