## Восстановить блок

`POST /v1/pages/:pageId/blocks/:blockId/restore`

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

## Параметры

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

Тело запроса не нужно.

## Примеры

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

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

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

```bash
curl -X POST "https://vibecode.bitrix24.tech/v1/pages/20/blocks/30/restore" \
  -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/30/restore', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
  },
})
const body = await res.json()

if (body.success) {
  console.log('Блок снова в черновике, опубликовать:', body.data.publishWith)
}
```

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

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

if (body.success) {
  console.log('Блок снова в черновике, опубликовать:', body.data.publishWith)
}
```

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

| Поле | Тип | Описание |
|------|-----|----------|
| `success` | boolean | `true` — блок возвращён из корзины |
| `data.id` | number | ID восстановленного блока |
| `data.deleted` | boolean | Всегда `false`: блок снова в черновике страницы |
| `data.version` | string | Версия страницы, которую изменил вызов. Всегда `draft` — черновик |
| `data.published` | boolean | Всегда `false`: опубликованная версия страницы не изменилась |
| `data.publishWith` | string | Вызов, который публикует черновик страницы, с подставленным ID страницы |

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

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

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

404 — блока нет в корзине страницы, например его уже восстановили:

```json
{
  "success": false,
  "error": {
    "code": "BLOCK_NOT_IN_DRAFT",
    "message": "No such block in this page's trash. List it with GET /v1/pages/{pageId}/blocks?deleted=true."
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|----------|
| 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 нет в корзине страницы: блок уже восстановлен, не удалялся или не существует. Текст ошибки отличается от ответа удаления и говорит про корзину |
| 404 | `ENTITY_NOT_FOUND` | Страницы нет или она не видна ключу. Для страницы базы знаний, рабочей группы или главной страницы нужен параметр `scope` |
| 404 | `ENTITY_NOT_FOUND` | Проверка корзины нашла блок, но при восстановлении Битрикс24 ответил, что блока на странице нет |
| 502 | `BLOCK_LIST_UNCONFIRMED` | Битрикс24 не вернул корзину страницы, блок не удалось проверить до восстановления. Блок не тронут |
| 502 | `BLOCK_RESTORE_UNCONFIRMED` | Битрикс24 не подтвердил восстановление. Перед повтором проверьте список блоков черновика |
| 403 | `BITRIX_ACCESS_DENIED` | У сотрудника, под которым выпущен ключ, нет прав на страницу в Битрикс24 |
| 422 | `BITRIX_ERROR` | Битрикс24 отклонил запрос, текст ошибки — в `message` |
| 403 | `SCOPE_DENIED` | У ключа нет скоупа `landing` |
| 403 | `WRITE_BLOCKED_READONLY_KEY` | Ключ в режиме только для чтения |
| 401 | `TOKEN_MISSING` | У ключа нет настроенных токенов Битрикс24 |

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

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

- **Повтор после потерянного ответа.** Повторный вызов для блока, который уже вернулся из корзины, возвращает `404 BLOCK_NOT_IN_DRAFT`, а не успех. Чтобы понять, сработал ли первый вызов, ищите блок в [списке блоков](/docs/entities/pages/blocks/list) черновика.

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

- [Удалить блок](/docs/entities/pages/blocks/delete)
- [Список блоков страницы](/docs/entities/pages/blocks/list)
- [Страницы](/docs/entities/pages)
- [Ошибки](/docs/errors)
