## Список блоков страницы

`GET /v1/pages/:pageId/blocks`

Возвращает блоки одной страницы сайта в том порядке, в котором они стоят на странице.

## Параметры

| Параметр | Тип | Обяз. | По умолч. | Описание |
|----------|-----|:-----:|-----------|---------|
| `pageId` (path) | number | да | — | ID страницы. Список: [`GET /v1/pages`](/docs/entities/pages/list) |
| `version` (query) | string | нет | `draft` | Версия страницы: `draft` — черновик, `published` — то, что видит посетитель сайта |
| `deleted` (query) | boolean | нет | `false` | `true` — вернуть блоки из корзины страницы вместо блоков на странице |
| `content` (query) | boolean | нет | `false` | `true` — добавить к каждому блоку его разметку `content` и подключения `css`, `js`. Увеличивает ответ на объём HTML всех блоков страницы |
| `scope` (query) | string | нет | — | Область сайта: `KNOWLEDGE` — база знаний, `GROUP` — страницы рабочих групп, `MAINPAGE` — главные страницы. Для страниц остальных сайтов параметр не передаётся |

**Пагинация.** Параметров `limit` и `offset` у метода нет: ответ содержит все блоки страницы за один вызов.

## Примеры

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

```bash
curl "https://vibecode.bitrix24.tech/v1/pages/20/blocks" \
  -H "X-Api-Key: YOUR_API_KEY"
```

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

```bash
curl "https://vibecode.bitrix24.tech/v1/pages/20/blocks" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/pages/20/blocks', {
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
  },
})

const { data, meta } = await res.json()
console.log(`Версия ${meta.version}, блоков: ${meta.count}`)
for (const block of data) {
  console.log(block.id, block.code, block.active ? 'виден' : 'скрыт')
}
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/pages/20/blocks', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})

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

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

| Поле | Тип | Описание |
|------|-----|---------|
| `success` | boolean | Всегда `true` при успехе |
| `data` | array | Блоки страницы в порядке их расположения на странице. Пустой массив, если блоков нет |
| `data[].id` | number | ID блока в прочитанной версии страницы |
| `data[].pageId` | number | ID страницы |
| `data[].code` | string | Код блока из каталога. Каталог: [`GET /v1/block-repository`](/docs/entities/pages/catalog) |
| `data[].name` | string | Название блока на языке портала |
| `data[].active` | boolean | `false` — блок скрыт на странице |
| `data[].meta` | object | Служебные сведения о блоке. Ключи в верхнем регистре, все значения строками: `CREATED_BY_ID` и `MODIFIED_BY_ID` — ID сотрудников, `DATE_CREATE` и `DATE_MODIFY` — даты в формате локали портала, `DESIGNER_MODE`, `XML_ID` и другие. `FAVORITE_META` приходит строкой `"Array"` и данных не содержит |
| `data[].content` | string \| null | Только при `content=true`. HTML блока вместе с внешней обёрткой `<div id="b<id>" class="block-wrapper …">`. У скрытого блока — `null` |
| `data[].css` | array | Только при `content=true`. Подключаемые стили блока |
| `data[].js` | array | Только при `content=true`. Подключаемые скрипты блока |
| `data[].version` | string | Версия, из которой прочитан блок: `draft` или `published` |
| `meta.version` | string | Версия страницы, которую прочитал запрос: `draft` или `published` |
| `meta.count` | number | Число блоков в `data` |

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

Черновик страницы с тремя блоками, первый скрыт:

```json
{
  "success": true,
  "data": [
    {
      "id": 32,
      "pageId": 20,
      "code": "01.big_with_text",
      "name": "Обложка с меняющимися на фоне картинками",
      "active": false,
      "meta": {
        "LID": "20",
        "FAVORITE_META": "Array",
        "CREATED_BY_ID": "1",
        "DATE_CREATE": "10/12/2026 02:16:49 pm",
        "MODIFIED_BY_ID": "1",
        "DATE_MODIFY": "10/12/2026 02:16:49 pm",
        "SITE_TYPE": "PAGE",
        "LANDING_TITLE": "",
        "LANDING_TPL_CODE": "",
        "SITE_TPL_CODE": "",
        "XML_ID": "",
        "DESIGNER_MODE": ""
      },
      "version": "draft"
    },
    {
      "id": 30,
      "pageId": 20,
      "code": "03.1.three_cols_big_with_text_and_titles",
      "name": "Текст в 3 колонки на всю ширину страницы на цветном фоне",
      "active": true,
      "meta": {
        "LID": "20",
        "FAVORITE_META": "Array",
        "CREATED_BY_ID": "1",
        "DATE_CREATE": "10/12/2026 02:16:48 pm",
        "MODIFIED_BY_ID": "1",
        "DATE_MODIFY": "10/12/2026 02:16:48 pm",
        "SITE_TYPE": "PAGE",
        "LANDING_TITLE": "",
        "LANDING_TPL_CODE": "",
        "SITE_TPL_CODE": "",
        "XML_ID": "",
        "DESIGNER_MODE": ""
      },
      "version": "draft"
    },
    {
      "id": 34,
      "pageId": 20,
      "code": "03.1.three_cols_big_with_text_and_titles",
      "name": "Текст в 3 колонки на всю ширину страницы на цветном фоне",
      "active": true,
      "meta": {
        "LID": "20",
        "FAVORITE_META": "Array",
        "CREATED_BY_ID": "1",
        "DATE_CREATE": "10/12/2026 02:16:55 pm",
        "MODIFIED_BY_ID": "1",
        "DATE_MODIFY": "10/12/2026 02:16:55 pm",
        "SITE_TYPE": "PAGE",
        "LANDING_TITLE": "",
        "LANDING_TPL_CODE": "",
        "SITE_TPL_CODE": "",
        "XML_ID": "",
        "DESIGNER_MODE": ""
      },
      "version": "draft"
    }
  ],
  "meta": {
    "version": "draft",
    "count": 3
  }
}
```

Запрос `GET /v1/pages/20/blocks?content=true` — показаны два блока из трёх, у скрытого блока `content` равен `null`:

```json
{
  "success": true,
  "data": [
    {
      "id": 32,
      "pageId": 20,
      "code": "01.big_with_text",
      "name": "Обложка с меняющимися на фоне картинками",
      "active": false,
      "meta": {
        "LID": "20",
        "FAVORITE_META": "Array",
        "CREATED_BY_ID": "1",
        "DATE_CREATE": "10/12/2026 02:16:49 pm",
        "MODIFIED_BY_ID": "1",
        "DATE_MODIFY": "10/12/2026 02:16:49 pm",
        "SITE_TYPE": "PAGE",
        "LANDING_TITLE": "",
        "LANDING_TPL_CODE": "",
        "SITE_TPL_CODE": "",
        "XML_ID": "",
        "DESIGNER_MODE": ""
      },
      "content": null,
      "css": [],
      "js": [],
      "version": "draft"
    },
    {
      "id": 34,
      "pageId": 20,
      "code": "03.1.three_cols_big_with_text_and_titles",
      "name": "Текст в 3 колонки на всю ширину страницы на цветном фоне",
      "active": true,
      "meta": {
        "LID": "20",
        "FAVORITE_META": "Array",
        "CREATED_BY_ID": "1",
        "DATE_CREATE": "10/12/2026 02:16:55 pm",
        "MODIFIED_BY_ID": "1",
        "DATE_MODIFY": "10/12/2026 02:16:55 pm",
        "SITE_TYPE": "PAGE",
        "LANDING_TITLE": "",
        "LANDING_TPL_CODE": "",
        "SITE_TPL_CODE": "",
        "XML_ID": "",
        "DESIGNER_MODE": ""
      },
      "content": "<div id=\"b34\" class=\"block-wrapper block-03-1-three-cols-big-with-text-and-titles\"><section class=\"landing-block\"><div class=\"container\"><h2>Hello</h2></div></section></div>",
      "css": [],
      "js": [],
      "version": "draft"
    }
  ],
  "meta": {
    "version": "draft",
    "count": 3
  }
}
```

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

404 — страница не найдена:

```json
{
  "success": false,
  "error": {
    "code": "ENTITY_NOT_FOUND",
    "message": "No such landing page, or it is not visible to this key. A knowledge-base, group or vibe page also needs `?scope=`."
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|---------|
| 400 | `INVALID_PAGE_ID` | `pageId` не положительное целое число |
| 400 | `INVALID_VERSION` | `version` не равен `draft` или `published` |
| 400 | `INVALID_SCOPE` | `scope` не входит в `KNOWLEDGE`, `GROUP`, `MAINPAGE` |
| 400 | `INVALID_PARAMS` | Битрикс24 отклонил запрос: не хватает обязательного параметра |
| 400 | `WRONG_PATH` | Запрос отправлен на `/v1/blocks` без страницы. Сообщение перечисляет правильные пути |
| 404 | `ENTITY_NOT_FOUND` | Страницы нет или она не видна владельцу ключа. Страница базы знаний, рабочей группы или главная страница не находится без параметра `scope` |
| 413 | `RESPONSE_TOO_LARGE` | Ответ больше 5 МБ. Прочитайте страницу без `content=true` |
| 502 | `BLOCK_LIST_UNCONFIRMED` | Битрикс24 не вернул список блоков. Повторите запрос |
| 403 | `BITRIX_ACCESS_DENIED` | У сотрудника, под которым выпущен ключ, нет прав на страницу в Битрикс24 |
| 422 | `BITRIX_ERROR` | Битрикс24 отклонил запрос, текст ошибки — в `message` |
| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `landing` |
| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |

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

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

**Черновик и опубликованная версия — разные блоки.** Добавление, изменение и удаление блоков меняют черновик страницы, посетитель видит изменения только после публикации страницы — `POST /v1/pages/:id/publication`. После публикации у блоков опубликованной версии свои ID, не совпадающие с ID в черновике. Методы записи принимают только ID из черновика: ID, взятый из ответа с `version=published`, они отклоняют с `404 BLOCK_NOT_IN_DRAFT`.

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

- [Добавить блок](/docs/entities/pages/blocks/create)
- [Изменить содержимое блока](/docs/entities/pages/blocks/update)
- [Удалить блок](/docs/entities/pages/blocks/delete)
- [Восстановить блок](/docs/entities/pages/blocks/restore)
- [Каталог блоков](/docs/entities/pages/catalog)
- [Чтение блока страницы](/docs/entities/pages/block-get)
- [Список страниц](/docs/entities/pages/list)
- [Страницы](/docs/entities/pages)
