
## 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 — 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 — by 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 in the current page (not the overall Bitrix24 account count — Bitrix24 does not pass a global total for this method) |
| `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": 10,
  "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 them 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 |
| 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 Bitrix24 `imopenlines.config` entity was passed (a typo or a non-filterable field) |

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; filtering and sorting on the 6 camelCase schema fields plus other camelCase names as an escape hatch; OR/AND via `$or`/`$and` are not supported — use `$in`; no operator queue fields): details — [List known specifics](/docs/openlines/config/list).

## See also

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