## Заменить разметку блока

`PATCH /v1/pages/:pageId/blocks/:blockId`

Заменяет HTML-разметку блока на странице лендинга целиком: новая разметка не объединяется с текущей.

Поля передаются плоско в корне JSON, без обёртки `fields`. Работа со страницами и их блоками — в разделе [Страницы](/docs/entities/pages).

## Параметры

| Параметр | Тип | Обяз. | Описание |
|----------|-----|:-----:|---------|
| `pageId` (path) | number | да | ID страницы. Список: [`GET /v1/pages`](/docs/entities/pages/list) |
| `blockId` (path) | number | да | ID блока в черновике страницы. Список: [`GET /v1/pages/:pageId/blocks`](/docs/entities/pages/blocks/list) — по умолчанию читает черновик. ID из `?version=published` и ID блоков в корзине не подходят |
| `scope` (query) | string | нет | Раздел Битрикс24, к которому относится страница: `KNOWLEDGE` — база знаний, `GROUP` — база знаний группы, `MAINPAGE` — главная страница. Для страницы обычного сайта не передаётся |

## Поля запроса (body)

| Поле | Тип | Обяз. | Описание |
|------|-----|:-----:|---------|
| `content` | string | да | Новая HTML-разметка блока. Заменяет текущую полностью |
| `designed` | boolean | нет | Признак блока с собственным оформлением. По умолчанию `false`. Принимаются также строки `"true"`, `"false"`, `"1"`, `"0"` и числа `1`, `0`. Блок, который такой признак не поддерживает, отвечает `422 BLOCK_DESIGN_NOT_SUPPORTED` |

## Примеры

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

```bash
curl -X PATCH "https://vibecode.bitrix24.tech/v1/pages/20/blocks/32" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "<section class=\"landing-block\"><div class=\"container\"><h2>Updated</h2><p>Second line</p></div></section>"
  }'
```

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

```bash
curl -X PATCH "https://vibecode.bitrix24.tech/v1/pages/20/blocks/32" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "<section class=\"landing-block\"><div class=\"container\"><h2>Updated</h2><p>Second line</p></div></section>"
  }'
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/pages/20/blocks/32', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    content: '<section class="landing-block"><div class="container"><h2>Updated</h2><p>Second line</p></div></section>',
  }),
})

const { success, data } = await res.json()
console.log('Publish with:', data.publishWith)
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/pages/20/blocks/32', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    content: '<section class="landing-block"><div class="container"><h2>Updated</h2><p>Second line</p></div></section>',
  }),
})

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

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

| Поле | Тип | Описание |
|------|-----|---------|
| `id` | number | ID изменённого блока — тот же, что в пути |
| `version` | string | Версия страницы, в которой изменён блок. Всегда `draft` — черновик |
| `published` | boolean | Опубликовано ли изменение. Всегда `false` |
| `publishWith` | string | Вызов, который публикует страницу вместе с изменением, с подставленным ID страницы. Опубликовать только этот блок — [Опубликовать блок](/docs/entities/pages/block-publication) |

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

```json
{
  "success": true,
  "data": {
    "id": 32,
    "version": "draft",
    "published": false,
    "publishWith": "POST /v1/pages/20/publication"
  }
}
```

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

404 — блока с таким ID нет в черновике страницы:

```json
{
  "success": false,
  "error": {
    "code": "BLOCK_NOT_IN_DRAFT",
    "message": "No such block in this page's draft. Ids come from GET /v1/pages/{pageId}/blocks, which reads the draft by default; ids from the published version are not accepted here."
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|---------|
| 400 | `MISSING_BLOCK_CONTENT` | Не передан `content` или передан не строкой |
| 400 | `INVALID_DESIGNED` | `designed` не является логическим значением |
| 400 | `INVALID_PAGE_ID` | `pageId` в пути не является положительным целым числом |
| 400 | `INVALID_BLOCK_ID` | `blockId` в пути не является положительным целым числом |
| 400 | `INVALID_SCOPE` | `scope` не равен `KNOWLEDGE`, `GROUP` или `MAINPAGE` |
| 400 | `INVALID_PARAMS` | Битрикс24 отклонил запрос: не хватает обязательного параметра |
| 404 | `BLOCK_NOT_IN_DRAFT` | Блока нет в черновике страницы: ID не существует, блок перенесён в корзину или ID взят из опубликованной версии |
| 404 | `ENTITY_NOT_FOUND` | Страницы нет или она не видна ключу. Для страницы базы знаний, рабочей группы или главной страницы нужен параметр `scope` |
| 404 | `ENTITY_NOT_FOUND` | Проверка черновика нашла блок, но при замене разметки Битрикс24 ответил, что блока на странице нет |
| 422 | `BLOCK_DESIGN_NOT_SUPPORTED` | Передан `designed: true`, а блок не поддерживает признак собственного оформления. Повторите запрос без `designed` |
| 502 | `BLOCK_LIST_UNCONFIRMED` | Битрикс24 не вернул черновик страницы — наличие блока не проверено, разметка не изменена |
| 502 | `BLOCK_CONTENT_UPDATE_UNCONFIRMED` | Битрикс24 не подтвердил замену разметки |
| 403 | `BITRIX_ACCESS_DENIED` | У сотрудника, под которым выпущен ключ, нет прав на страницу в Битрикс24 |
| 422 | `BITRIX_ERROR` | Битрикс24 отклонил запрос, текст ошибки — в `message` |
| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `landing` |
| 403 | `WRITE_BLOCKED_READONLY_KEY` | Ключ в режиме «только чтение» |
| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |

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

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

**Обёртка блока сохраняется.** После замены чтение [`GET /v1/pages/:pageId/blocks?content=true`](/docs/entities/pages/blocks/list) отдаёт новую разметку внутри прежнего элемента `<div id="b<id>" class="block-wrapper …">`.

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

- [Список блоков страницы](/docs/entities/pages/blocks/list)
- [Добавить блок на страницу](/docs/entities/pages/blocks/create)
- [Удалить блок](/docs/entities/pages/blocks/delete)
- [Восстановить блок](/docs/entities/pages/blocks/restore)
- [Опубликовать блок](/docs/entities/pages/block-publication)
- [Страницы](/docs/entities/pages)
