# Обновить автоматизацию

export default function Layout(props) {
  const { OpenAPIPage } = props.components ?? {};
  return (
    <>
      {props.children}
      ## Обновить автоматизацию

`PUT /api/v1/automations/{id}`

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

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

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

**Тело запроса** (`application/json`, обязательное): object
- `description`: string, nullable — Новое описание
- `edges`: массив object — Полный новый список связей
  - `id`: string, обязательное — Идентификатор ребра
  - `source`: string, обязательное — Узел-источник
  - `sourcePort`: string — Выходной порт источника
  - `target`: string, обязательное — Узел-приёмник
  - `targetPort`: string — Входной порт приёмника
- `folderId`: string (uuid), nullable — Новая папка; null — корень
- `name`: string — Новое название
- `nodes`: массив object — Полный новый граф узлов
  - `action`: string — Действие сервисного узла
  - `branches`: массив object — Ветки условия (для kind=branch)
    - `portKey`: string, обязательное — Порт ветки
    - `rule`: any — Условие ветки: правило @legalstack/logic
  - `category`: "trigger" | "service" | "logic" | "tool" | "end", обязательное — Категория: триггер, сервис платформы, логика, инструмент или завершение
  - `config`: object — Настройки узла (зависят от типа)
  - `durationIso`: string — Длительность паузы, ISO 8601 duration (для kind=wait)
  - `eventType`: string — Ожидаемый тип события (для kind=waitForEvent)
  - `fallbackPortKey`: string — Порт по умолчанию, если ни одна ветка не сработала
  - `id`: string, обязательное — Идентификатор узла
  - `inputs`: массив object — Входные порты
    - `key`: string, обязательное — Ключ порта
    - `label`: string — Подпись порта
    - `role`: string — Роль порта
  - `itemsExpression`: any — Выражение списка для обхода (для kind=map)
  - `kind`: "trigger" | "action" | "branch" | "map" | "parallel" | "wait" | "waitForEvent", обязательное — Механика: trigger — запуск, action — действие, branch — ветвление, map — обход списка, parallel — параллельные ветви, wait — пауза, waitForEvent — ожидание события; ветви соединяются неявно, когда ведут в один узел
  - `label`: string, обязательное — Подпись узла на схеме
  - `outputs`: массив object — Выходные порты
    - `key`: string, обязательное — Ключ порта
    - `label`: string — Подпись порта
    - `role`: string — Роль порта
  - `position`: object, обязательное
    - `x`: number, обязательное — Координата X на схеме
    - `y`: number, обязательное — Координата Y на схеме
  - `signalName`: string — Имя сигнала для пробуждения
  - `timeoutIso`: string — Таймаут ожидания, ISO 8601 duration
  - `type`: string, обязательное — Тип узла из реестра (см. GET /api/v1/automations-meta/nodes)
  - `typeVersion`: integer — Версия контракта узла, в которой сохранены настройки; без значения считается 1
- `status`: "draft" | "active" | "disabled" — Статус: draft — черновик, active — работает, disabled — выключена

**Ответы**

- `200` — Автоматизация обновлена (с итогами валидации графа) (`application/json`, Automation)
  - `createdAt`: string — Когда создана, ISO 8601
  - `createdBy`: string — Создатель
  - `description`: string, nullable — Описание
  - `edges`: массив object — Связи между узлами
  - `folderId`: string, nullable — Папка; null — корень
  - `id`: string, обязательное — Идентификатор автоматизации
  - `lastRunAt`: string, nullable — Последний прогон, ISO 8601
  - `lastStatus`: string, nullable — Статус последнего прогона
  - `name`: string, обязательное — Название автоматизации
  - `nodes`: массив object — Узлы графа (секреты замаскированы)
  - `runningRuns`: number — Текущие прогоны
  - `runsCount`: number — Всего прогонов
  - `status`: string, обязательное — Статус: draft, active, disabled
  - `stuckRuns`: number — Прогоны без ожидаемого прогресса
  - `triggerSample`: object — Образец данных триггера для тест-прогона; отдаётся только тем, кто может редактировать автоматизацию
    - `event`: AutomationTriggerSampleEntry — Данные последнего реального события
      - `capturedAt`: string, обязательное — Когда записан, ISO 8601
      - `data`: object, обязательное — Данные триггера
      - `truncated`: boolean, обязательное — Часть данных отброшена из-за размера
    - `manual`: AutomationTriggerSampleEntry и any
      - `capturedAt`: string, обязательное — Когда записан, ISO 8601
      - `data`: object, обязательное — Данные триггера
      - `truncated`: boolean, обязательное — Часть данных отброшена из-за размера
  - `updatedAt`: string — Когда обновлена, ISO 8601
  - `validationIssues`: массив object — Проблемы валидации графа; активация возможна только без ошибок
- `400` — Некорректный запрос: не прошла валидация параметров или тела (`application/problem+json`, ProblemDetails)
- `401` — Токен отсутствует, недействителен или истёк (`application/problem+json`, ProblemDetails)
- `403` — Недостаточно прав или scope (`application/problem+json`, ProblemDetails)

    </>
  );
}
