## Обновить секцию

`PATCH /v1/calendar-sections/:id`

Обновляет поля существующей секции. `type`, `ownerId` и `name` обязательны в каждом вызове — даже если меняется только цвет или описание.

## Параметры

| Параметр | Тип | Обяз. | Описание |
|----------|-----|:-----:|---------|
| `id` (path) | number | да | Идентификатор секции |

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

| Поле | Тип | Обяз. | Описание |
|------|-----|:-----:|---------|
| `type` | string | да | Тип календаря: `user`, `group`. Должен соответствовать `type` существующей секции — иначе вернётся ошибка доступа |
| `ownerId` | number | да | Идентификатор владельца календаря. Должен соответствовать `ownerId` существующей секции |
| `name` | string | да | Название секции. Требуется даже при изменении других полей — передавайте текущее значение, если переименование не нужно |
| `description` | string | нет | Описание |
| `color` | string | нет | Цвет секции в формате `#RRGGBB` |
| `textColor` | string | нет | Цвет текста в формате `#RRGGBB` |
| `export` | object | нет | Параметры экспорта в формате iCal: `{ "ALLOW": boolean, "SET": "all" \| "3_9" \| "6_12" }`. Ключи внутри объекта — в верхнем регистре |

Поля только на чтение — `id`, `access`, `perm`, `isCollab`, `createdBy`, `dateCreate`, `updatedAt` — в теле запроса передавать нельзя.

## Примеры

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

```bash
curl -X PATCH "https://vibecode.bitrix24.tech/v1/calendar-sections/42" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "user",
    "ownerId": 1,
    "name": "Командные встречи",
    "color": "#FF5733",
    "description": "Обновлённое описание"
  }'
```

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

```bash
curl -X PATCH "https://vibecode.bitrix24.tech/v1/calendar-sections/42" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "user",
    "ownerId": 1,
    "name": "Командные встречи",
    "color": "#FF5733",
    "description": "Обновлённое описание"
  }'
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/calendar-sections/42', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    type: 'user',
    ownerId: 1,
    name: 'Командные встречи',
    color: '#FF5733',
    description: 'Обновлённое описание',
  }),
})

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

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/calendar-sections/42', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    type: 'user',
    ownerId: 1,
    name: 'Командные встречи',
    color: '#FF5733',
    description: 'Обновлённое описание',
  }),
})

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

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

| Поле | Тип | Описание |
|------|-----|---------|
| `success` | boolean | Всегда `true` при успехе |
| `data.id` | number | Идентификатор обновлённой секции — единственное поле в ответе на обновление |

Чтобы получить актуальные значения остальных полей — запросите [`GET /v1/calendar-sections?type=<...>&ownerId=<...>`](./list.md).

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

```json
{
  "success": true,
  "data": {
    "id": 42
  }
}
```

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

400 — пропущен обязательный якорь `type`, `ownerId` или `name`, проверяется до обращения к Битрикс24:

```json
{
  "success": false,
  "error": {
    "code": "MISSING_REQUIRED_PARAMS",
    "message": "PATCH /v1/calendar-sections/{id} requires: name. Example: PATCH /v1/calendar-sections/{id} { \"name\": ..., ... }"
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|---------|
| 400 | `MISSING_REQUIRED_PARAMS` | Пропущено обязательное поле `type`, `ownerId` или `name` — проверяется до обращения к Битрикс24 |
| 422 | `BITRIX_ERROR` | Некорректное значение поля, например недопустимый `type` |
| 400 | `READONLY_FIELD` | В теле запроса передано поле только на чтение |
| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `calendar` |
| 403 | `WRITE_BLOCKED_READONLY_KEY` | API-ключ в режиме «только чтение» — запись запрещена |
| 401 | `TOKEN_MISSING` | У API-ключа нет настроенных токенов |
| 502 | `BITRIX_UNAVAILABLE` | Битрикс24 временно недоступен — повторите запрос позже |

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

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

**`type`, `ownerId`, `name` обязательны в каждом вызове.** Частичное обновление секции не поддерживается — три поля-якоря нужны, даже если меняется только цвет. Если переименование не нужно, передайте текущее `name` — его можно получить через [`GET /v1/calendar-sections`](./list.md).

**Несуществующий `id` возвращает `200` без изменений.** Обновление секции, которой нет, не приводит к ошибке — приходит `{ "success": true, "data": { "id": <id> } }`, но ничего не меняется. Прежде чем полагаться на результат, убедитесь, что секция есть в [`GET /v1/calendar-sections`](./list.md).

**Ответ на обновление содержит только `id`.** Чтобы увидеть обновлённую секцию полностью, сделайте отдельный запрос к [`GET /v1/calendar-sections`](./list.md).

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

- [Список секций](./list.md)
- [Создать секцию](./create.md)
- [Удалить секцию](./delete.md)
- [Пакет операций](./batch.md)
