
## Список приложений

`GET /v1/apps`

Возвращает приложения портала, зарегистрированные текущим API-ключом, с постраничной разбивкой.

## Параметры

| Параметр | Тип | Обяз. | По умолч. | Описание |
|----------|-----|:-----:|:---------:|---------|
| `page` (query) | number | нет | 1 | Номер страницы, от 1. Значение меньше 1 или нечисловое заменяется на 1 |
| `limit` (query) | number | нет | 50 | Размер страницы. Максимум 200. Значение 0, отрицательное или нечисловое заменяется на 50 |

## Примеры

### curl — личный ключ

```bash
curl "https://vibecode.bitrix24.tech/v1/apps?page=1&limit=50" \
  -H "X-Api-Key: YOUR_API_KEY"
```

### curl — OAuth-приложение

```bash
curl "https://vibecode.bitrix24.tech/v1/apps?page=1&limit=50" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"
```

### JavaScript — личный ключ

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/apps?page=1&limit=50', {
  headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})
const { data, total } = await res.json()
console.log(`Приложений: ${total}`, data)
```

### JavaScript — OAuth-приложение

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/apps?page=1&limit=50', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})
const { data, total } = await res.json()
```

## Поля ответа

| Поле | Тип | Описание |
|------|-----|---------|
| `success` | boolean | Всегда `true` при успехе |
| `data` | array | Массив приложений |
| `data[].id` | string | Идентификатор приложения |
| `data[].title` | string | Название |
| `data[].description` | string \| null | Описание |
| `data[].scopes` | string[] | Скоупы Битрикс24, закреплённые за ключом приложения |
| `data[].handlerUrl` | string | Адрес обработчика на стороне платформы. Подробнее — [Приложения](/docs/apps) |
| `data[].appUrl` | string \| null | Адрес приложения на Black Hole. До публикации — `null` |
| `data[].redirectUris` | string[] | Разрешённые адреса возврата OAuth |
| `data[].bitrixClientId` | string \| null | Идентификатор OAuth-клиента на портале |
| `data[].prefix` | string | Префикс ключа приложения |
| `data[].suffix` | string | Последние символы ключа приложения |
| `data[].authorId` | string | Идентификатор автора приложения |
| `data[].portalId` | string | Идентификатор портала |
| `data[].createdAt` | string | Дата создания, ISO 8601 |
| `data[].updatedAt` | string | Дата изменения, ISO 8601 |
| `data[].placements` | string[] | Привязанные [места встраивания](/docs/apps/placements). До публикации — пустой массив |
| `data[].catalogStatus` | string | Статус в каталоге: `PRIVATE` / `PUBLISHED` / `UNPUBLISHED`. Надёжный признак публикации |
| `data[].publishedAt` | string \| null | Дата публикации, ISO 8601. `null`, если приложение не публиковалось |
| `data[].placementResizeEnabled` | boolean | Подстраивать ли высоту iframe встройки под контент приложения. Значение по умолчанию — `false`. Как включать — [PATCH /v1/apps/:id](/docs/apps/update) |
| `total` | number | Общее количество приложений портала, доступных ключу |
| `page` | number | Текущая страница |
| `limit` | number | Применённый размер страницы |

## Пример ответа

```json
{
  "success": true,
  "data": [
    {
      "id": "11a2b3c4-d5e6-47f8-9012-3a4b5c6d7e8f",
      "title": "Коннектор контакт-центра",
      "description": null,
      "scopes": ["crm", "imopenlines", "imconnector", "placement"],
      "handlerUrl": "https://vibecode.bitrix24.tech/v1/bitrix-handler",
      "appUrl": null,
      "redirectUris": [
        "https://vibecode.bitrix24.tech/oauth/complete",
        "http://localhost"
      ],
      "bitrixClientId": "local.6b2c3d4e5f6a70.33334444",
      "prefix": "vibe_app_local_6b2",
      "suffix": "4444",
      "authorId": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
      "portalId": "8b1f0e2a-3c4d-5e6f-7a8b-9c0d1e2f3a4b",
      "createdAt": "2026-06-04T08:52:57.583Z",
      "updatedAt": "2026-06-04T08:52:57.583Z",
      "placements": [],
      "catalogStatus": "PRIVATE",
      "publishedAt": null,
      "placementResizeEnabled": false
    },
    {
      "id": "22b3c4d5-e6f7-48a9-0123-4b5c6d7e8f90",
      "title": "Дашборд продаж",
      "description": null,
      "scopes": ["crm", "user", "placement"],
      "handlerUrl": "https://vibecode.bitrix24.tech/v1/bitrix-handler",
      "appUrl": "https://app-abc12345.vibecode.bitrix24.tech",
      "redirectUris": [
        "https://vibecode.bitrix24.tech/oauth/complete",
        "http://localhost"
      ],
      "bitrixClientId": "local.5a1b2c3d4e5f60.11112222",
      "prefix": "vibe_app_local_5a1",
      "suffix": "2222",
      "authorId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "portalId": "8b1f0e2a-3c4d-5e6f-7a8b-9c0d1e2f3a4b",
      "createdAt": "2026-05-13T11:31:53.810Z",
      "updatedAt": "2026-05-13T11:35:12.204Z",
      "placements": ["CRM_DEAL_DETAIL_TAB"],
      "catalogStatus": "PUBLISHED",
      "publishedAt": "2026-05-13T11:35:12.204Z",
      "placementResizeEnabled": true
    }
  ],
  "total": 2,
  "page": 1,
  "limit": 50
}
```

## Пример ответа при ошибке

401 — не передан заголовок `X-Api-Key`:

```json
{
  "success": false,
  "error": {
    "code": "MISSING_API_KEY",
    "message": "API key required. Pass via X-Api-Key header."
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|---------|
| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |
| 401 | `INVALID_API_KEY` | Неверный API-ключ |

Полный список общих ошибок API — [Ошибки](/docs/errors).

## Известные особенности

- Приложение системного бота-компаньона и удалённые приложения в список не попадают.
- По умолчанию ответ содержит не более 50 приложений — это граница, а не ошибка. Сравните `total` с длиной `data`, чтобы понять, остались ли приложения за пределами страницы, и при необходимости запросите следующую через `page`.

## Смотрите также

- [Приложения](/docs/apps)
- [Данные приложения](/docs/apps/get)
- [Создать приложение](/docs/apps/create)
- [Скоупы](/docs/scopes)
