
## List workspaces

`GET /v1/automated-solutions`

Returns the digital workspaces of the Bitrix24 account together with the smart process types bound to each workspace.

## Parameters

| Parameter | Type | Default | Description |
|----------|-----|-----------|---------|
| `filter` (query) | object | — | Filter by the `id` and `title` fields from [`GET /v1/automated-solutions/fields`](/docs/entities/automated-solutions/fields).<br>[Filtering syntax](/docs/filtering). Example: `?filter[id]=7` |
| `order` (query) | object | `id` ascending | Sort by the `id` and `title` fields: `?order[title]=asc`. Short form: `?sort=title`; descending: `?sort=-title` |
| `select` (query) | string | — | Field selection: `?select=id,title` |
| `limit` (query) | number | `50` | Number of records, up to 5000 |
| `offset` (query) | number | `0` | Skip N records |

Pagination: when `limit` is greater than 50, Vibecode assembles the response from several pages on its own. The maximum is 5000 records per call.

## Examples


### curl — personal key

```bash
curl -g "https://vibecode.bitrix24.com/v1/automated-solutions?limit=10&order[title]=asc" \
  -H "X-Api-Key: YOUR_API_KEY"
```

### curl — OAuth application

```bash
curl -g "https://vibecode.bitrix24.com/v1/automated-solutions?limit=10&order[title]=asc" \
  -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/automated-solutions?limit=10&order[title]=asc', {
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
  },
})

const { success, data } = await res.json()
for (const place of data) {
  console.log(place.id, place.title, 'types:', place.typeIds.length)
}
```

### JavaScript — OAuth application

```javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/automated-solutions?limit=10&order[title]=asc', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})

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

## Response fields

| Field | Type | Description |
|------|-----|---------|
| `success` | boolean | Always `true` on success |
| `data` | array | Array of workspaces |
| `data[].id` | number | Workspace identifier |
| `data[].title` | string | Workspace name |
| `data[].typeIds` | array | IDs of the bound smart process types — the type `id` field from [`GET /v1/smart-processes`](/docs/entities/smart-processes/list), not its `entityTypeId`. An empty array if no types are bound |
| `meta.total` | number | Total number of workspaces matching the filter |
| `meta.hasMore` | boolean | Whether more records exist beyond `limit` |

## Response example

```json
{
  "success": true,
  "data": [
    { "id": 9, "title": "HR processes", "typeIds": [63] },
    { "id": 11, "title": "Procurement", "typeIds": [] },
    { "id": 1, "title": "yay", "typeIds": [3, 13, 15] }
  ],
  "meta": {
    "total": 3,
    "hasMore": false
  }
}
```

## Error response example

400 — filter by the `typeIds` field:

```json
{
  "success": false,
  "error": {
    "code": "UNKNOWN_FILTER_FIELD",
    "message": "Unknown filter field 'typeIds' for entity 'automated-solutions'. Available: id, title"
  }
}
```

## Errors

| HTTP | Code | Description |
|------|-----|---------|
| 400 | `UNKNOWN_FILTER_FIELD` | Filter by a field other than `id` and `title`, including `typeIds`. The request is rejected before reaching the portal |
| 400 | `UNKNOWN_SORT_FIELD` | Sort by a field other than `id` and `title`, in either of the two forms — `order[typeIds]=asc` or `sort=typeIds`. The request is rejected before reaching the portal |
| 400 | `INVALID_FILTER` | The `filter` value could not be parsed: one request mixes the JSON form `filter={...}` and the square-bracket form `filter[...]`, or the string is not a JSON object |
| 401 | `MISSING_API_KEY` | The `X-Api-Key` header was not passed |
| 401 | `TOKEN_MISSING` | The API key has no configured tokens |
| 403 | `SCOPE_DENIED` | The API key does not have the `crm` scope |
| 429 | `RATE_LIMITED` | Rate limit exceeded: 300 requests per minute per portal, all API keys of the portal share one limit. The exact value arrives in the `x-ratelimit-limit` header (the cap is divided across replicas). Retry after the delay in the `Retry-After` header |

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

## Known specifics

**Workspaces with the same name.** When sorting by `title`, Vibecode adds `id` ascending as the second key. Workspaces with the same name come in the same order on every page, so paging through with `offset` neither loses nor repeats records.

## See also

- [Get a workspace](/docs/entities/automated-solutions/get)
- [Create a workspace](/docs/entities/automated-solutions/create)
- [Workspace fields](/docs/entities/automated-solutions/fields)
- [Digital workspaces](/docs/entities/automated-solutions)
- [Smart process types](/docs/entities/smart-processes)
- [Filtering syntax](/docs/filtering)
- [Limits and optimization](/docs/optimization)
