---
title: "Согласовать несколько проходов одним вызовом"
method: POST
path: "/api/v1/docflow/approvals/batch-approve"
tags: ["Docflow approvals"]
---

# Согласовать несколько проходов одним вызовом

`POST /api/v1/docflow/approvals/batch-approve`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/docflow/approvals/batch-approve`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://erp.akeda.ru/oauth2/authorize`, token URL `https://erp.akeda.ru/oauth2/token`, scopes: `akeda:delegate`)

«Согласовать выбранные» очереди «Ждут меня»: до 100 проходов, на каждый — решение approve с одним необязательным комментарием. Это несколько одиночных решений подряд, а не одно общее: каждая строка проходит те же проверки, что POST /approvals/{id}/decisions (чья виза, запрет самосогласования заявки на оплату, состояние прохода), в своей транзакции, и согласованная заявка встаёт в очередь финансов вместе со своим решением.

Ответ 200 несёт итог по КАЖДОЙ переданной строке в исходном порядке: ok=true и новое состояние прохода либо code и detail того же отказа, которым ответила бы одиночная дверь (docflow.approval.not_yours — ход уже не ваш, docflow.approval.not_found, docflow.approval.state_conflict и т. д.). Отказ одной строки не откатывает соседние. Вернуть на доработку и отказать пакетом нельзя: у каждого такого решения своя обязательная причина.

Отказ всего вызова — только когда решать нечем: пустой пакет или больше 100 строк (400), нет права docflow.flow:approve (403), согласование не подключено (503).

## Headers

- `X-Tenant` string, required

## Request body

- DocflowApprovalBatchInput
  - `approval_ids` UUID[], required: Проходы, которые согласовать; повторы схлопываются
  - `comment` string: Необязательный комментарий, один на все решения пакета; пишется в историю каждого

## Response `200`

Итог по каждой строке

- DocflowApprovalBatchResult
  - `items` DocflowApprovalBatchItem[], required
    - `approval_id` string, uuid, required
    - `ok` boolean, required: Решение по строке принято
    - `state` 'pending' | 'approved' | 'returned' | 'rejected' | 'cancelled': Состояние прохода после решения: pending — ждёт следующий этап
    - `code` string: Код отказа строки — тот же, что у одиночной двери решения
    - `detail` string: Отказ строки словами, на языке запроса
  - `approved` integer, required: Сколько строк согласовано
  - `failed` integer, required: Сколько строк не согласовано

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `503`: Внешний банк, справочник или контур подключений временно недоступен

## Changes

- **2026-10-20** `765c65fadf8f`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/akeda/apis/akeda-erp-client-api/changes/api/v1/docflow/approvals/batch-approve/post.md)

---

[API](https://skmtc.dev/akeda/apis/akeda-erp-client-api.md) · [All operations](https://skmtc.dev/akeda/apis/akeda-erp-client-api/llms.txt) · [OpenAPI document](https://skmtc.dev/akeda/apis/akeda-erp-client-api/revisions/7a6b75f272ee?raw)
