## Отключить это устройство

`DELETE /v1/cowork/key`

Отзывает ключ, которым сделан этот вызов, — приложение на этом устройстве сразу теряет доступ к порталу. Идентификатора в запросе нет, поэтому отключить чужое устройство через этот эндпоинт невозможно.

Вызов доступен только ключу десктопа Cowork/Code со скоупом `vibe:cowork`. Ключ агентского места и проектный ключ деплоя несут тот же скоуп, но получают отказ `403 COWORK_DESKTOP_KEY_REQUIRED`.

**Скоуп:** `vibe:cowork` плюс класс ключа десктопа Cowork/Code. Тело запроса не читается.

## Примеры

Ось авторизации одна: OAuth-приложение вызвать этот эндпоинт не может — его ключ не относится к классу десктопа и получает `403 COWORK_DESKTOP_KEY_REQUIRED`.

### curl — ключ Cowork/Code

```bash
curl -X DELETE https://vibecode.bitrix24.tech/v1/cowork/key \
  -H "X-Api-Key: YOUR_COWORK_KEY"
```

### JavaScript — ключ Cowork/Code

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/cowork/key', {
  method: 'DELETE',
  headers: { 'X-Api-Key': 'YOUR_COWORK_KEY' },
})

if (res.ok) {
  // Ключ погашен — сотрите локальную копию секрета и покажите экран входа.
} else if (res.status === 404) {
  const body = await res.json()
  if (body.error?.code === 'ROUTE_NOT_FOUND') {
    // Версия платформы старше эндпоинта: сохраните локальную сессию и не показывайте ошибку.
  }
}
```

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

| Поле | Тип | Описание |
|------|-----|----------|
| `success` | boolean | Всегда `true` при успехе. Ключ погашен либо уже был погашен ранее |

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

```json
{
  "success": true
}
```

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

`403` — вызов сделан ключом другого класса:

```json
{
  "success": false,
  "error": {
    "code": "COWORK_DESKTOP_KEY_REQUIRED",
    "message": "Only a Cowork/Code desktop key may revoke itself on this endpoint."
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|----------|
| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |
| 401 | `INVALID_API_KEY` | Ключ не опознан: такой строки на платформе нет |
| 401 | `KEY_INACTIVE` | Ключ уже отозван, и кэш аутентификации успел истечь |
| 403 | `INSUFFICIENT_SCOPE` | У ключа нет скоупа `vibe:cowork` |
| 403 | `COWORK_DESKTOP_KEY_REQUIRED` | Ключ не относится к классу десктопа Cowork/Code — так отвечает и ключ агентского места, и проектный ключ деплоя |
| 415 | `FST_ERR_CTP_INVALID_MEDIA_TYPE` | Тело прислано с типом содержимого, который этот маршрут не разбирает. Отправляйте запрос без тела либо с пустым телом и заголовком `Content-Type: application/json` |
| 429 | `RATE_LIMITED` | Превышен предел частоты на связку портал, владелец ключа и ключ. Суммарный лимит платформы — 5 запросов в минуту. Действующее для вашего ключа значение приходит в заголовке `x-ratelimit-limit` — оно ниже суммарного, поскольку лимит делится между репликами |

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

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

**Аварийный выход работает в тех состояниях, где остальные вызовы отбиваются.** Заморозка баланса портала и суточная квота вызовов на этот эндпоинт не распространяются, и платформенный выключатель Cowork/Code его тоже не закрывает. Отдельно от этого разрешён ключ в режиме только для чтения: уничтожение собственного секрета не считается расходной операцией.

**Повторный вызов безопасен, но ответ меняется.** Пока запись аутентификации живёт в кэше, повтор отвечает `200` и ничего не делает. После истечения кэша тот же ключ получает `401 KEY_INACTIVE`. Оба ответа означают, что ключ мёртв.

**Секрет перестаёт действовать сразу, но при недоступности шины оповещения реплики принимают его ещё до 30 секунд.** Поэтому автоматические повторы не нужны: максимум один повтор и не раньше чем через 30 секунд, иначе аварийная кнопка упрётся в ограничение частоты.

**Отзыв не отключает проектный ключ деплоя.** Ключ, выданный через [`POST /v1/cowork/deploy-key`](/docs/cowork/deploy-key), продолжает работать, как и выписанные им токены доступа к серверам. Их отзывают в личном кабинете. Формулировка в приложении обязана называть это отключением одного устройства, а не полным отзывом доступов.

**Владелец не получает уведомления об отзыве.** След операции остаётся в журнале аудита портала — его читает администратор портала в личном кабинете.

**Соседние устройства продолжают работать.** У каждого устройства свой ключ, и отзыв гасит только предъявленный.

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

- [Cowork/Code](/docs/cowork)
- [Проектный ключ для деплоя](/docs/cowork/deploy-key)
- [Эндпоинты Cowork/Code](/docs/cowork/endpoints)
- [Ошибки](/docs/errors)
