---
title: "Получить пакеты документов оператора"
method: GET
path: "/api/v1/docflow/messages"
tags: ["Docflow mirror"]
---

# Получить пакеты документов оператора

`GET /api/v1/docflow/messages`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/docflow/messages`
- 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`)

«Пакет», а не «документ»: единица обмена — конверт, в котором лежат основной файл, титулы, извещения и подписи под ними. Учётный документ Акеды из него ещё предстоит сделать, и делает это человек.

Период отбирается по дате ДОКУМЕНТА, а не по дате получения: бухгалтер ищет накладную за март, и то, что оператор доставил её в апреле, к его вопросу отношения не имеет. Отбор company фильтрует по юрлицу подключения: у самого пакета юрлица нет.

## Query parameters

- `connection` string, uuid
- `company` string, uuid
- `direction` 'incoming' | 'outgoing'
- `contact` string, uuid
- `counterparty_inn` string
- `state_code` string
- `state_category` 'in_work' | 'awaiting_signature' | 'cancellation_requested' | 'cancellation_refused' | 'draft' | 'error' | 'signer_invalid' | 'approved' | 'rejected' | 'cancelled' | 'interrupted': Состояние пакета нашими словами поверх кода оператора (справочник «Код состояния документа»): в работе, ждёт подписи, запрос на аннулирование, отказ в аннулировании, черновик, с ошибкой, подписант не прошёл проверку, утверждён, отклонён, аннулирован, прервано. Слово оператора остаётся в state_name.
- `actions_due` '1'
- `date_from` string, date
- `date_to` string, date
- `limit` integer
- `offset` integer

## Headers

- `X-Tenant` string, required

## Response `200`

Страница пакетов

- DocflowMessageList
  - `count` integer, required
  - `results` DocflowMessage[], required
    - `id` string, uuid, required
    - `connection` string, uuid, required
    - `external_id` string, required: Идентификатор пакета у оператора
    - `external_revision` string, required: Редакция пакета: оператор меняет содержимое конверта, не меняя его идентификатор
    - `direction` 'incoming' | 'outgoing', required
    - `doc_type` string, required: Слова оператора, а не наша классификация
    - `doc_subtype` string, required
    - `doc_regulation` string, required
    - `number` string, required
    - `date` string, required: Календарная дата документа ГГГГ-ММ-ДД; пусто означает, что даты нет вовсе
    - `amount` string, required: Сумма строкой ровно так, как её прислал оператор; пусто означает «суммы нет», а не ноль
    - `currency` string, required
    - `counterparty` DocflowCounterparty, required: Вторая сторона обмена. Реквизиты хранятся текстом всегда, даже когда сопоставление с нашим контрагентом состоялось: карточку могут удалить или переименовать, а пакет обязан остаться читаемым спустя годы.
      - `name` string, required
      - `inn` string, required
      - `kpp` string, required
      - `external_id` string, required: Идентификатор участника обмена у оператора: надёжнее ИНН, потому что у одного ИНН бывает несколько ящиков
      - `contact` string, uuid
      - `contact_name` string, required: Наш контрагент, если сопоставление состоялось. Это наша догадка по ИНН либо выбор человека, а не факт от оператора
    - `state_code` string, required: Код состояния документооборота у оператора
    - `state_name` string, required: Состояние словами оператора: своего перевода состояний у нас нет и быть не должно
    - `our_org_external_id` string, required
    - `received_at` string, date-time
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `connection_name` string, required
    - `connection_provider` string, required
    - `stage_repeat` boolean: Оператор подключения умеет «Повторить этап» утверждения входящего документа (Saby). У Контур.Диадока такого действия нет
    - `company` string, uuid
    - `company_name` string, required
    - `attachments_total` integer, required
    - `signatures_total` integer, required
    - `actions_due` integer, required: Сколько незакрытых этапов у пакета. Ноль означает «ход не за нами»
    - `stage_name` string, required: Название ближайшего незакрытого этапа словами оператора
    - `sign_required` boolean, required: У пакета открыт этап, который закрывается нашей подписью под самим документом. Отдельно от actions_due и stage_name: счётчик говорит «ход за нами», а название этапа — слова оператора, и отличить по ним подпись от согласования нельзя. Пока признак поднят, приёмка к учёту отказывает кодом docflow.edo.sign_first
    - `notice_sign_required` boolean, required: Открытый подписной этап служебный: извещение о получении, подтверждение даты, квитанция. Отдельным признаком, потому что человеку это другое дело — «Подписать извещение» подтверждает технологию обмена, а не содержание документа. Приёмку к учёту служебный этап НЕ держит
    - `attachments` DocflowAttachment[], nullable: Состав пакета. Наполняется ТОЛЬКО в карточке одного пакета; в списке остаётся null. null означает «не спрашивали», пустой массив — «спросили, и там пусто»
      - `id` string, uuid, required
      - `message` string, uuid, required
      - `external_id` string, required: Идентификатор вложения у оператора
      - `name` string, required: Имя файла словами оператора
      - `kind` '' | 'document' | 'title' | 'notice', required: Наш словарь, а не оператора: документ, ответный титул, служебное извещение. Пусто означает, что вид неизвестен, и это законно
      - `content_type` string, required
      - `size_bytes` integer, required
      - `sha256` string, required
      - `stored` boolean, required: Байты скачаны и лежат у НАС. Ссылка оператора хранилищем не считается: она живёт около месяца, а накладную спрашивают через три года
      - `downloaded_at` string, date-time
      - `created_at` string, date-time, required
    - `signatures` DocflowSignature[], nullable
      - `id` string, uuid, required
      - `message` string, uuid, required
      - `attachment` string, uuid
      - `side` 'ours' | 'counterparty', required
      - `signer_name` string, required
      - `signer_position` string, required
      - `certificate` DocflowCertificate, required: Сертификат, которым подпись доказывают спустя годы: имя подписанта меняется, отпечаток нет.
        - `thumbprint` string, required
        - `subject` string, required
        - `valid_from` string, date-time
        - `valid_to` string, date-time
      - `poa_number` string, required: Номер машиночитаемой доверенности. С 2023 года подпись сотрудника без неё недействительна
      - `signed_at` string, date-time
      - `stored` boolean, required: Контейнер подписи скачан к нам и открывается отдельной операцией
      - `created_at` string, date-time, required
    - `stages` DocflowStage[], nullable
      - `id` string, uuid, required
      - `message` string, uuid, required
      - `external_id` string, required: Идентификатор этапа у оператора; он же адресует действие
      - `name` string, required
      - `actions` DocflowStageAction[], required
        - `code` string, required
        - `name` string, required
        - `requires_signature` boolean: Действие закрывается подписью («ТребуетПодписания» оператора). Точнее признака этапа: на этапе «Утверждение» подписи требует «Утвердить», а «Переназначить» — нет. У этапов, записанных до появления признака, false у всех действий — тогда судят по requires_signature этапа
      - `requires_signature` boolean, required: Этап закрывается подписью. Признак оператора, а не наш вывод из названия
      - `closed` boolean, required: Ход не за нами. Закрытые этапы не показываются и не считаются
      - `service` boolean, required: Служебный этап оператора — извещение о получении, подтверждение, квитанция. Технология обмена, а не решение по документу: клиент обрабатывает все служебные этапы пакета одним действием, а не по кнопке на каждый
      - `started_at` string, date-time, required: С какого момента этап ждёт человека: дата этапа у оператора, без неё — когда зеркало увидело его открытым; открытый снова этап считается заново
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `events` DocflowEvent[], nullable
      - `id` string, uuid, required
      - `message` string, uuid, required
      - `external_id` string, required
      - `name` string, required
      - `comment` string, required
      - `occurred_at` string, date-time
      - `created_at` string, date-time, required
    - `flow_documents` DocflowMessageFlowLink[], nullable: Карточки документооборота, которые вёз этот конверт. Как и весь состав, наполняется ТОЛЬКО в карточке одного пакета; в списке остаётся null
      - `id` string, uuid, required
      - `document` string, uuid, required
      - `role` 'primary' | 'attachment' | 'basis', required: Чем карточка приходится конверту: основной документ, приложение или основание
      - `version` integer, required: Текущая редакция карточки: открывать человеку следует её
      - `kind` 'contract' | 'specification' | 'amendment' | 'invoice' | 'act' | 'upd' | 'goods_waybill' | 'transport_waybill' | 'consignment_note' | 'transport_order' | 'tax_invoice' | 'correction' | 'return' | 'discrepancy_act' | 'reconciliation_act' | 'power_of_attorney' | 'other', required: Вид документа внутреннего контура. Вид называет бумагу, а не учётную операцию: продажу и закупку из бумаги делают отдельные команды.
      - `status` 'draft' | 'registered' | 'archived', required
      - `title` string, required
      - `number` string, required
      - `date` string, date, required
      - `created_at` string, date-time, required
      - `external_attachment_id` string: Файл пакета, по которому заведена карточка (ERP-2063): идентификатор вложения у оператора (external_id), а без него — «id:» и id вложения. У пакета «ДС + счёт» своя карточка у каждого файла. Нет у карточки на весь пакет — так заводила приёмка до разбора по файлам
    - `cancellation` DocflowCancellation: Соглашение сторон об аннулировании документа. Запускает его любая сторона, а решает вторая: согласие даёт состояние 22 «Документ аннулирован», отказ — состояние 40 «Аннулирование отклонено», при котором состояние самого документа НЕ меняется. Шаг цепочки выводится из ленты СОБЫТИЙ пакета, а не из кода состояния: состояние 27 «Ожидает аннулирования» оператор отдаёт только отдельным методом выборки по событиям.
      - `state` 'none' | 'requested' | 'agreed' | 'refused', required: Шаг цепочки: none — её нет; requested — ждём решения; agreed — аннулирован по соглашению; refused — в аннулировании отказано, и документ остался действующим
      - `state_name` string, required: Слова ОПЕРАТОРА о состоянии, когда оно относится к аннулированию. Своего перевода состояний у нас нет и быть не должно
      - `initiator` '' | 'us' | 'counterparty', required: Кто запустил цепочку. Пусто означает «неизвестно», а не «мы»
      - `reason` string, required: Причина словами того, кто её написал. Не переводится
      - `requested_at` string, date-time, nullable, required
      - `decided_at` string, date-time, nullable, required
      - `available` boolean, required: Вид документа вообще допускает аннулирование. У электронной транспортной накладной его нет: там отказ 409 с кодом docflow.edo.cancellation_unavailable
      - `can_request` boolean, required: Ход за нами и цепочку можно начать
      - `can_approve` boolean, required: Соглашение прислали нам и на него можно согласиться
      - `can_reject` boolean, required: Соглашение прислали нам и в нём можно отказать
    - `accounting_document` string, uuid
    - `accepted_at` string, date-time, nullable: Когда пакет приняли к учёту. Переживает удаление учётного документа: приёмка была
    - `accepted_by` integer, nullable: Кто принял пакет к учёту
    - `accounting_number` string: Номер учётного документа приёмки для строки «В учёте: … № …»; пусто — не принят или документ не прочитан
    - `accounting_type` string: Вид учётного документа приёмки (ключ вида документа ядра), например finance_purchase
    - `draft` boolean, required: Пакет записан оператору и наружу ещё не ушёл. Выводится из состава пакета при чтении: исходящий, без единого события обмена и без единой подписи
    - `deleted_at` string, date-time, nullable: Корзина НАШЕГО зеркала: контрагент её не видит, и пакет у оператора остаётся прежним
    - `deleted_by` integer, nullable
    - `deleted_reason` '' | 'trashed' | 'draft_removed', required: Возвращают из корзины только trashed: у draft_removed документа у оператора больше нет
    - `recognized` DocflowRecognized: Сумма и реквизиты, прочитанные ИЗ ФАЙЛА пакета, а не присланные оператором. Оператор присылает сумму отдельным реквизитом только у формализованных документов — УПД и счёта-фактуры; у счёта на оплату и договора она живёт внутри PDF. Поле стоит РЯДОМ с amount, а не вместо него: amount — слова оператора, по ним сверяют переписку спустя годы, и подменять их нашим чтением чужой бумаги нельзя. Разбор локальный и детерминированный: текстовый слой PDF, у скана — распознавание изображения; ни одной нейросети и ни одного обращения к платному справочнику. Строк товарной таблицы здесь нет: со скана они не восстанавливаются и фактом не выдаются.
      - `at` string, date-time, nullable: Когда разбирали. Пусто — попытки ещё не было; это не то же самое, что source=none («читали и брать оказалось нечего»)
      - `source` '' | 'title' | 'text' | 'none', required: Чем прочитано, и заодно насколько верить. title — подписанный файл обмена ФНС, проверять нечего; text — вытащено якорными правилами из чужой раскладки, и рядом со значением интерфейс ставит «проверьте»; none — читали и брать было нечего; пустая строка — разбора не было
      - `document` string, required: Имя вложения СЛОВАМИ ОПЕРАТОРА: по нему человек откроет ту же бумагу и сверит показанную цифру
      - `amount` string, required: Итог к оплате строкой, как и amount: через число с плавающей точкой здесь теряются копейки. Пустая строка — итог в бумаге не нашёлся
      - `currency` string, required: Валюта счёта, если бумага её назвала. Пусто означает «не сказано»: подставлять рубль молча нельзя
      - `number` string, required
      - `date` string, required: Дата документа в форме ГГГГ-ММ-ДД; пустая строка означает, что даты нет
    - `payment` DocflowMessagePayment: Состояние оплаты входящего счёта. Два состояния, а не шесть: путь заявки внутри финансов подробнее (план, отправлена, ждёт подписи, исполнена, отклонена, отменена), но ленте нужен ответ на один вопрос — деньги уже ушли или ещё нет. Оплаченным платёж делает ВЫПИСКА, а не наша кнопка и не слово банка: «отправлено в банк» означает лишь, что платёжка легла в интернет-банк на подпись.
      - `state` 'requested' | 'paid', required: requested — заявка заведена, денег ещё нет; paid — платёж подтверждён выпиской
      - `request` string, uuid, required
      - `number` string: Номер заявки на оплату словами для человека
      - `paid_on` string: Дата оплаты из выписки в форме ГГГГ-ММ-ДД. Заполнена только у state=paid
      - `step` 'draft' | 'on_approval' | 'rework' | 'approved' | 'scheduled' | 'sent' | 'paid' | 'payment_cancelled': Шаг заявки словарём хода заявки «Документов»: до согласования — состояние документа заявки, после — строка очереди финансов
      - `docflow_request` string, uuid
      - `order` string, uuid
    - `viewed` boolean, required: Открывал ли карточку пакета текущий сотрудник — личная отметка, а не состояние у оператора. Считается в ленте одним запросом на страницу; карточка отдаёт false, потому что её открытие само ставит отметку дверью viewed.
    - `state_category` 'in_work' | 'awaiting_signature' | 'cancellation_requested' | 'cancellation_refused' | 'draft' | 'error' | 'signer_invalid' | 'approved' | 'rejected' | 'cancelled' | 'interrupted', required: Состояние пакета нашими словами поверх кода оператора (справочник «Код состояния документа»): в работе, ждёт подписи, запрос на аннулирование, отказ в аннулировании, черновик, с ошибкой, подписант не прошёл проверку, утверждён, отклонён, аннулирован, прервано. Слово оператора остаётся в state_name.
    - `operator_link` string, required: Карточка документа в кабинете нашей организации у оператора («СсылкаДляНашаОрганизация»); пусто, пока карточку не перечитали
    - `print_form` DocflowMessagePrintForm, required: Печатный вид пакета. operator — PDF оператора с впечатанными подписями, лежащий у нас; ours — наша форма счёта или УПД по формализованному XML, когда оператор своего вида не отдал (штампа подписи оператора на ней нет).
      - `source` 'operator' | 'ours', required
      - `size` integer, required
      - `revision` string, required: Редакция пакета, с которой снят PDF оператора
      - `fetched_at` string, date-time, required

## Other responses

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

---

[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/3c60ded179f2?raw)
