## Удалить форму

`DELETE /v1/crm-forms/:id`

Удаляет CRM-форму по идентификатору вместе с её настройками. Восстановить удалённую форму через API нельзя — создавайте новую при необходимости.

## Параметры

| Параметр | Тип | Обяз. | По умолч. | Описание |
|----------|-----|:-----:|-----------|----------|
| `id` (path) | integer | да | — | Идентификатор формы. Список: [`GET /v1/crm-forms`](/docs/entities/crm-forms/list) |
| `confirm` (query) | boolean | нет | `false` | `true` подтверждает удаление активной формы. Без подтверждения активная форма не удаляется — ответ `409 CRM_FORM_DELETE_CONFIRMATION_REQUIRED`. Выключенная форма удаляется и без `confirm`. Принимает только `true` или `false` |
| `confirmed` (query) | boolean | нет | — | Синоним `confirm`. Если переданы оба параметра, значения должны совпадать, иначе `400 INVALID_PARAMS` |
| `updatedTime` (query) | string | нет | — | Время последнего изменения формы из [`GET /v1/crm-forms/:id`](/docs/entities/crm-forms/get). Если форму изменили позже этого времени, удаление отклоняется с `409 CRM_FORM_VERSION_MISMATCH`. Без параметра проверка версии не выполняется |

Другие параметры строки запроса и любое поле тела возвращают `400 INVALID_PARAMS`. Тело запроса не передаётся.

Тип и значение `updatedTime` проверяет Битрикс24. Используйте версию из ответа чтения формы; локальный отказ на неверный тип не гарантируется.

## Примеры

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

```bash
curl -X DELETE "https://vibecode.bitrix24.tech/v1/crm-forms/75?confirm=true" \
  -H "X-Api-Key: YOUR_API_KEY"
```

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

```bash
curl -X DELETE "https://vibecode.bitrix24.tech/v1/crm-forms/75?confirm=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/crm-forms/75?confirm=true', {
  method: 'DELETE',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
  },
})
const body = await res.json()
if (body.success && body.data.deleted) {
  console.log('Форма удалена')
}
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/crm-forms/75?confirm=true', {
  method: 'DELETE',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})
const body = await res.json()
if (body.success && body.data.deleted) {
  console.log('Форма удалена')
}
```

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

| Поле | Тип | Описание |
|------|-----|----------|
| `success` | boolean | `true` при успешном удалении |
| `data.deleted` | boolean | Всегда `true`: форма удалена |

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

HTTP-статус `200 OK`:

```json
{
  "success": true,
  "data": {
    "deleted": true
  }
}
```

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

409 — форма активна, а удаление не подтверждено:

```json
{
  "success": false,
  "error": {
    "code": "CRM_FORM_DELETE_CONFIRMATION_REQUIRED",
    "message": "CRM-форма активна: подтвердите удаление и повторите запрос",
    "b24Code": "CRM_FORM_DELETE_CONFIRMATION_REQUIRED"
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|----------|
| 400 | `INVALID_PARAMS` | `id` не положительное целое число, передан параметр строки запроса, кроме `confirm`, `confirmed` и `updatedTime`, `confirm`, `confirmed` или `updatedTime` передан дважды, значения подтверждений различаются, `confirm` не `true` и не `false` или передано поле тела |
| 400 | `FST_ERR_CTP_EMPTY_JSON_BODY` | Передан заголовок `Content-Type: application/json`, а тело пустое. Уберите заголовок |
| 402 | `CRM_FORM_WRITE_RESTRICTED` | Тариф Битрикс24 не разрешает запись CRM-форм. На бесплатном и демо-тарифе запись не выполняется |
| 403 | `CRM_FORM_SYSTEM_IMMUTABLE` | Форма системная — `system: true` в [списке форм](/docs/entities/crm-forms/list). Системную форму удалить нельзя |
| 404 | `ENTITY_NOT_FOUND` | Формы с таким `id` нет, в том числе при повторном удалении той же формы |
| 409 | `CRM_FORM_DELETE_CONFIRMATION_REQUIRED` | Форма активна, а удаление не подтверждено |
| 409 | `CRM_FORM_VERSION_MISMATCH` | Форму изменили после переданного `updatedTime`. Текущее время изменения — в `error.currentUpdatedTime` |
| 403 | `BITRIX_INSUFFICIENT_SCOPE` | У токена Битрикс24 нет необходимого скоупа |
| 409 | `CRM_FORM_REST_NOT_ENABLED` | На портале выключены методы CRM-форм |
| 403 | `BITRIX_ACCESS_DENIED` | Битрикс24 отказал пользователю ключа в доступе к форме |
| 422 | `BITRIX_ERROR` | Другой отказ Битрикс24. Текст отказа — в `error.message` |
| 500 | `CRM_FORM_SIDE_EFFECT_FAILED` | Удаление уже выполнено, но завершилось с ошибкой. Проверьте форму через [`GET /v1/crm-forms/:id`](/docs/entities/crm-forms/get) до повтора |
| 502 | `BITRIX_UNAVAILABLE` | Битрикс24 недоступен или вернул ответ неожиданной формы. Проверьте форму до повтора |
| 403 | `WRITE_BLOCKED_READONLY_KEY` | Ключ только для чтения |
| 403 | `SCOPE_DENIED` | Ключу не хватает скоупа `crm` |
| 401 | `MISSING_API_KEY` | Не передан `X-Api-Key` |
| 401 | `TOKEN_MISSING` | У ключа нет действующей авторизации в Битрикс24 |

Ошибки портала содержат исходный код в `error.b24Code` и ошибки полей в `error.validation`, если они переданы. Коды `CRM_FORM_*` сохраняют HTTP-статус, код и сообщение. Ответы 429 и 503 описаны в разделе [Лимиты и оптимизация](/docs/optimization). Полный список общих ошибок API — [Ошибки](/docs/errors).

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

- **Выключение вместо удаления.** Чтобы форма перестала работать, а её настройки сохранились, [выключите](/docs/entities/crm-forms/deactivate) её — выключенную форму можно включить снова.

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

- [Выключить форму](/docs/entities/crm-forms/deactivate)
- [Получить форму](/docs/entities/crm-forms/get)
- [Список форм](/docs/entities/crm-forms/list)
- [Создать форму](/docs/entities/crm-forms/create)
- [Лимиты и оптимизация](/docs/optimization)
