# Отозвать согласование

export default function Layout(props) {
  const { OpenAPIPage } = props.components ?? {};
  return (
    <>
      {props.children}
      ## Отозвать согласование

`DELETE /api/v1/approvals/{id}`

**Авторизация:** dpop или oauth2: `approval:write`

**Параметры**

| Имя | Где | Обязательный | Тип | Описание |
| --- | --- | --- | --- | --- |
| `id` | path | да | string (uuid) | Идентификатор согласования |

**Тело запроса** (`application/json`): ApprovalRevokeRequest
- `reason`: string — Причина отзыва

**Ответы**

- `200` — Согласование отозвано (`application/json`, Approval)
  - `comments`: массив ApprovalComment — Комментарии (в детальном ответе)
    - `createdAt`: string, обязательное — Когда создан, ISO 8601
    - `id`: string (uuid), обязательное — Идентификатор комментария
    - `text`: string, обязательное — Текст комментария
    - `userId`: string, обязательное — Автор
    - `userName`: string, обязательное — Имя автора
  - `completedAt`: string, nullable — Когда завершено, ISO 8601
  - `context`: string, nullable — Пояснение для участников
  - `createdAt`: string, обязательное — Когда создано, ISO 8601
  - `currentStage`: number, обязательное — Текущий этап
  - `documentId`: string, nullable, обязательное — Основной согласуемый документ; null — согласование без документа
  - `documentIds`: массив string — Все согласуемые документы, по порядку
  - `documentTitle`: string, обязательное — Название согласования
  - `history`: массив object — Журнал событий (в детальном ответе)
  - `historyChainValid`: boolean — Цела ли hash-цепочка журнала
  - `id`: string (uuid), обязательное — Идентификатор согласования
  - `initiatorId`: string, обязательное — Инициатор
  - `initiatorName`: string, обязательное — Имя инициатора
  - `participants`: массив ApprovalParticipant — Все участники (в детальном ответе)
    - `action`: string, обязательное — Роль: approve или review
    - `comment`: string, nullable — Комментарий к решению
    - `decidedById`: string, nullable — Кто принял решение за участника (заместитель)
    - `decidedByName`: string, nullable — Имя того, кто принял решение за участника
    - `deputyUntil`: string, nullable — Последний день отсутствия участника, YYYY-MM-DD
    - `deputyUserId`: string, nullable — Заместитель из оргструктуры, который может решить за отсутствующего участника
    - `deputyUserName`: string, nullable — Имя заместителя
    - `id`: string (uuid), обязательное — Идентификатор участника
    - `rejectedItemIds`: массив string — Пункты, которые участник отклонил; пусто при отклонении целиком
    - `stageNumber`: number, обязательное — Номер этапа
    - `status`: string, обязательное — Состояние решения участника
    - `userId`: string, обязательное — Пользователь
    - `userName`: string, обязательное — Отображаемое имя
  - `revisions`: массив object — Доработки: кто и что отклонил, что исправлено, когда отправлено повторно
  - `round`: integer — Раунд согласования: 1, затем +1 после каждой доработки
  - `stages`: массив ApprovalStage — Этапы с участниками (в детальном ответе)
    - `approvalMode`: string, обязательное — Порядок: sequential, parallel или race
    - `id`: string (uuid), обязательное — Идентификатор этапа
    - `name`: string, обязательное — Название этапа
    - `participants`: массив ApprovalParticipant — Участники этапа
      - `action`: string, обязательное — Роль: approve или review
      - `comment`: string, nullable — Комментарий к решению
      - `decidedById`: string, nullable — Кто принял решение за участника (заместитель)
      - `decidedByName`: string, nullable — Имя того, кто принял решение за участника
      - `deputyUntil`: string, nullable — Последний день отсутствия участника, YYYY-MM-DD
      - `deputyUserId`: string, nullable — Заместитель из оргструктуры, который может решить за отсутствующего участника
      - `deputyUserName`: string, nullable — Имя заместителя
      - `id`: string (uuid), обязательное — Идентификатор участника
      - `rejectedItemIds`: массив string — Пункты, которые участник отклонил; пусто при отклонении целиком
      - `stageNumber`: number, обязательное — Номер этапа
      - `status`: string, обязательное — Состояние решения участника
      - `userId`: string, обязательное — Пользователь
      - `userName`: string, обязательное — Отображаемое имя
    - `stageNumber`: number, обязательное — Порядковый номер этапа
    - `status`: string, обязательное — Состояние этапа
  - `status`: string, обязательное — Статус: in_progress, approved, rejected, revoked
  - `subjectKind`: string, обязательное — Предмет: document, block, question или variable
  - `teamId`: string, обязательное — Команда-владелец
  - `totalStages`: number, обязательное — Всего этапов
  - `type`: string, обязательное — Тип согласования
  - `updatedAt`: string, обязательное — Когда обновлено, ISO 8601
- `400` — Некорректный запрос: не прошла валидация параметров или тела (`application/problem+json`, ProblemDetails)
- `401` — Токен отсутствует, недействителен или истёк (`application/problem+json`, ProblemDetails)
- `403` — Недостаточно прав или scope (`application/problem+json`, ProblemDetails)

    </>
  );
}
