
## Копировать блок

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

Копирует блок на страницу toPageId или на исходную, если поле не задано. Возвращает новый ID.

Требуется скоуп `landing`. READONLY-ключ получает 403 до обращения к Б24. Правится черновик.

## Параметры запроса

| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
| `pageId` | integer | да | Исходная страница из [списка страниц](/docs/entities/pages/list). |
| `blockId` | integer | да | Блок исходной страницы. ID можно взять из ответа copy/move. |
| `scope` | string | нет | Query: KNOWLEDGE, GROUP, MAINPAGE; для обычных сайтов не нужен. |
| `toPageId` | integer | нет | Целевая страница; copy по умолчанию использует исходную. |
| `afterBlockId` | integer | нет | Блок целевой страницы; чужой или отсутствующий даёт 400 до записи. |

## Примеры

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

```bash
curl -X POST "https://vibecode.bitrix24.tech/v1/pages/42/blocks/31/copy" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```

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

```bash
curl -X POST "https://vibecode.bitrix24.tech/v1/pages/42/blocks/31/copy" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'
```

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

```javascript
const response = await fetch("https://vibecode.bitrix24.tech/v1/pages/42/blocks/31/copy", {
  method: "POST",
  headers: { "X-Api-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({})
});
const result = await response.json();
```

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

```javascript
const response = await fetch("https://vibecode.bitrix24.tech/v1/pages/42/blocks/31/copy", {
  method: "POST",
  headers: { "X-Api-Key": "YOUR_APP_KEY", "Authorization": "Bearer USER_SESSION_TOKEN", "Content-Type": "application/json" },
  body: JSON.stringify({})
});
const result = await response.json();
```

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

| Поле | Тип | Описание |
|---|---|---|
| `success` | boolean | Успешный ответ. |
| `data` | object | Результат операции. |
| `data.blockId` | integer | ID блока после операции. |
| `data.pageId` | integer | ID страницы результата. |

## Ответ

```json
{
  "success": true,
  "data": {
    "blockId": 51,
    "pageId": 42
  }
}
```

## Ошибки

| HTTP | Код | Причина |
|---|---|---|
| 400 | `INVALID_PARAMS` | Некорректный ID, тело или блок после которого вставлять. |
| 400 | `MISSING_REQUIRED_FIELDS` | Нет обязательного поля. |
| 403 | `SCOPE_DENIED / WRITE_BLOCKED_READONLY_KEY` | Нет landing или ключ только для чтения. |
| 409 | `LANDING_MODULE_NOT_ENABLED` | Модуль Сайты недоступен на портале. |
| 404 | `ENTITY_NOT_FOUND` | Нет страницы или блок не принадлежит исходной странице. |
| 422 | `BITRIX_ERROR / BITRIX_NO_EFFECT` | Отказ Б24 или результат не подтверждён; не повторяйте удаление вслепую. |

[Общие ошибки](/docs/errors).

Каждый ответ Б24 ограничен 8 МиБ; превышение даёт 502. После неподтверждённого результата не повторяйте действие вслепую: copy может создать ещё один блок, up/down изменят порядок повторно.
