## Удалить расписание

`DELETE /v1/work-schedules/:id`

Удаляет своё расписание из библиотеки портала. Расписание, по которому работают серверы, удаляется только с согласием перевести их в другой режим. Восстановить удалённое расписание через API нельзя — создавайте новое при необходимости.

## Параметры

| Параметр | В | Тип | Обяз. | Описание |
|----------|---|-----|:-----:|----------|
| `id` | path | string | да | ID своего расписания. Источник — `data[].id` из [списка расписаний](./list.md) |
| `reassign` | query | string | нет | `true` — согласие перевести серверы на расписании в другой режим перед удалением: приложение — в `IDLE` со своим запомненным порогом простоя, 60 минут, если своего нет, агент и бот — в `ALWAYS`. Любое другое значение читается как отказ |

## Примеры

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

```bash
curl -X DELETE "https://vibecode.bitrix24.tech/v1/work-schedules/WORK_SCHEDULE_ID?reassign=true" \
  -H "X-Api-Key: YOUR_API_KEY"
```

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

```bash
curl -X DELETE "https://vibecode.bitrix24.tech/v1/work-schedules/WORK_SCHEDULE_ID?reassign=true" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"
```

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

```javascript
const res = await fetch(
  `https://vibecode.bitrix24.tech/v1/work-schedules/${workScheduleId}?reassign=true`,
  { method: 'DELETE', headers: { 'X-Api-Key': 'YOUR_API_KEY' } }
)
if (res.status === 204) {
  console.log('Расписание удалено')
}
```

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

```javascript
const res = await fetch(
  `https://vibecode.bitrix24.tech/v1/work-schedules/${workScheduleId}?reassign=true`,
  {
    method: 'DELETE',
    headers: {
      'X-Api-Key': 'YOUR_APP_KEY',
      'Authorization': 'Bearer USER_SESSION_TOKEN',
    },
  }
)
if (res.status === 204) {
  console.log('Расписание удалено')
}
```

## Ответ

При успешном удалении возвращается HTTP-статус `204 No Content` с пустым телом. Признак успеха — код ответа, не содержимое. Новые режимы переведённых серверов читаются в [`GET /v1/infra/servers/:id`](/docs/infra/servers/get).

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

```
HTTP/1.1 204 No Content
```

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

409 — по расписанию работают серверы, а `reassign=true` не передан:

```json
{
  "success": false,
  "error": {
    "code": "WORK_SCHEDULE_IN_USE",
    "message": "The work schedule is assigned to servers: repeat with reassign=true to move them to another run mode and delete it",
    "details": { "assignedCount": 2 }
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|----------|
| 400 | `RUN_MODE_UNAVAILABLE` | Режимы работы ещё не включены для портала |
| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |
| 401 | `INVALID_API_KEY` | Ключ не опознан: такой строки на платформе нет |
| 403 | `WORK_SCHEDULE_PRESET_READONLY` | Расписание готовое — оно не удаляется |
| 403 | `WORK_SCHEDULE_EDIT_FORBIDDEN` | Удалить расписание может только его автор или администратор портала |
| 403 | `WRITE_BLOCKED_READONLY_KEY` | Ключ в режиме «только чтение» — удаление ему закрыто |
| 403 | `INFRA_SCOPE_REQUIRED` | У ключа нет скоупа `vibe:infra` |
| 403 | `INFRA_FORBIDDEN_FOR_COWORK_KEY` | Вызов сделан ключом Cowork/Code — библиотека расписаний такому ключу закрыта. Что делать — [Проектный ключ для деплоя](/docs/cowork/deploy-key) |
| 404 | `NOT_FOUND` | Расписания с таким `id` нет в портале ключа, либо ключ не привязан к порталу Битрикс24 |
| 409 | `WORK_SCHEDULE_IN_USE` | По расписанию работают серверы, а `reassign=true` не передан. Число серверов — в `error.details.assignedCount`. Тот же ответ приходит, если сервер назначили на расписание во время удаления, — повторите запрос |
| 429 | `RATE_LIMITED` | Превышен лимит 10 запросов в минуту на ключ. Точное значение — в заголовке `x-ratelimit-limit` (потолок делится на реплики) |

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

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

- **Перевод касается и серверов других сотрудников.** С `reassign=true` в другой режим переходят все серверы на расписании, не только принадлежащие владельцу ключа, — и вместе с режимом меняется их счёт.
- **Удалённые серверы удалению не мешают.** Серверы, которые уже удалены, в `assignedCount` не входят и снимаются с расписания без согласия.

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

- [Список расписаний](./list.md)
- [Обновить расписание](./update.md)
- [Сменить режим работы сервера](/docs/infra/lifecycle/run-mode)
