Inflow. Поступления
Методы для работы с документами «Поступление»: получение документов вместе со строками, создание и изменение документов и их строк, массовая загрузка, принятие на склад и откат принятия, удаление, загрузка накладных файлами в формате CSV.
Как получить ключ, как формируются запросы и какие бывают ответы и ошибки — в статье Общие сведения. Здесь описаны только особенности методов раздела inflow. Как работать с поступлениями в панели управления — в статье Приёмка товара.
Методы
| Метод | Адрес | Что делает |
|---|---|---|
| Получить поступления | /api/inflow | Возвращает документы поступления с фильтрами по датам и складу |
| Создать или изменить | /api/inflow/update | Обновляет шапку документа или создаёт документ, может сменить статус |
| Массовое обновление | /api/inflow/batchUpdate | Создаёт документы вместе со строками из одного XML |
| Удалить документ | /api/inflow/delete | Удаляет документ-черновик |
| Принять на склад | /api/inflow/accepting | Принимает черновик: увеличивает остатки на складе |
| Откатить принятие | /api/inflow/rollback | Возвращает принятый документ в черновик и убирает товар со склада |
| Создать или изменить строку | /api/inflow/updateItems | Обновляет строку документа или добавляет новую |
| Удалить строку | /api/inflow/deleteItems | Удаляет строку документа |
| Загрузить файл | /api/inflow/upload | Принимает накладную в формате CSV |
Где передавать параметры. Ключ apikey и формат format принимаются и в адресной строке, и в теле POST-запроса. Параметры поиска id и external_id в методах delete, accepting, rollback и deleteItems читаются только из адресной строки (GET). Остальные параметры всех методов можно передавать и в адресной строке, и в теле POST. Значения с кириллицей, пробелами и знаками + кодируйте.
Статусы документа
Статус хранится в поле status. Документ проходит четыре этапа:
| Значение | Название | Что означает |
|---|---|---|
draft | Черновик | Документ наполняется. Остатки на складе не менялись. Только в этом статусе документ можно удалить |
confirm | Товар поступил, идёт сверка | Промежуточный статус. Остатки ещё не изменены |
accept | Принят | Товар оприходован, остатки на складе увеличены. Изменение количества — только корректировкой. Можно откатить методом rollback |
complete | Принят окончательно | Корректировки недоступны. Откатить через API нельзя |
Статус можно сменить параметром status в методах update и batchUpdate либо отдельным методом accepting. Переход в accept или complete принимает документ на склад. Назад по цепочке статус этими методами вернуть нельзя: для отката принятого документа используйте rollback (только из статуса accept).
Получение поступлений
GET https://[компания].myvirtualpos.ru/api/inflow?apikey=MySecret&datefrom=20260901&dateto=20260930&withitems=1
Параметры запроса
| id | Число. Ид документа. Если указан, ищется только этот документ |
| external_id | Строка. Код документа во внешней системе (например, в 1С). Действует, если id не указан |
| last_id | Число. Вернуть документы с ид больше указанного: удобно для получения новых документов с прошлого обмена. Действует, если не указаны id и external_id |
| warehouse_id | Число. Ид точки продаж, на которую оформлено поступление. Если не указан, возвращаются документы всех точек |
| ext_warehouse_id | Строка. Код точки продаж во внешней системе. Действует, если не указан warehouse_id. Если точки с таким кодом нет, возвращается пустой список |
| date | Дата ГГГГММДД. Документы с этой датой документа |
| datefrom, dateto | Дата ГГГГММДД. Документы с датой документа с указанной даты и по указанную дату включительно |
| cdatefrom, cdateto | Дата ГГГГММДД. То же по дате создания документа в системе |
| last_update_date | Дата ГГГГММДД. Документы, изменённые начиная с этой даты |
| days | Число. Глубина поиска в днях от текущей даты. По умолчанию 30. Действует только если не заданы date, datefrom, cdatefrom и last_update_date |
| withitems | 1 — добавить строки документов. По умолчанию возвращаются только шапки |
| withadjustment | 1 — добавить данные корректировки поступления |
| format | json (по умолчанию) или xml |
Все условия объединяются по «и». Документы возвращаются по возрастанию ид. Даты передаются строго в формате ГГГГММДД; иначе метод вернёт ошибку Incorrect date format.
Ограничение в 30 дней действует и при поиске по ид. Если не задан ни один из параметров дат и не указан days, метод отбирает документы только за последние 30 дней по дате документа. Это касается и запросов с id, external_id и last_id: документ старше 30 дней вернётся только если добавить days с большим значением (например, days=3650) или указать дату. Параметр dateto сам по себе окно не снимает: считается 30 дней до этой даты.
Структура ответа
| success | 1 — данные получены |
| type | Тип данных, всегда inflow |
| count | Количество документов в ответе |
| days_limit | Число дней, за которые отобраны документы: 30 по умолчанию или значение days. Пусто, если отбор шёл по датам |
| inflows | Список документов. Каждый обёрнут в объект inflow |
Поля документа
Пустые значения в JSON приходят как null, в XML — как пустой элемент.
Основное
| id | Число. Ид документа |
| external_id | Строка. Код документа во внешней системе |
| guid | Строка. Уникальный идентификатор документа (GUID) |
| status | Строка. Статус документа, см. раздел «Статусы документа» |
| waybill | Строка. Номер накладной |
| docdate | Строка. Дата документа, формат гггг-мм-дд чч:мм:сс |
| accept_date | Строка. Дата принятия на склад |
| comment | Строка. Комментарий |
| amount | Строка. Сумма документа по строкам |
| created_date, last_update_date | Строка. Дата и время создания и последнего изменения |
| created_by, last_update_by | Ид пользователя, создавшего и изменившего документ. Для документов, созданных через API, пусто |
Точка продаж и поставщик
| warehouse_id | Число. Ид точки продаж |
| warehouse_external_id | Строка. Код точки продаж во внешней системе |
| supplier_id | Число. Ид поставщика |
| supplier_external_id | Строка. Код поставщика во внешней системе |
| supplier_name, supplier_inn, supplier_kpp | Строка. Название, ИНН и КПП поставщика |
| supplier_type | Число. Ид типа поставщика |
| supplier_readonly_inflow | Число. 1 — поступления от такого поставщика создаются автоматически (внутренний поставщик) и не редактируются |
Документы-основания
| factura_invoice_num, factura_invoice_date | Строка. Номер и дата счёта-фактуры |
| UPD_num, UPD_date | Строка. Номер и дата УПД |
| correction_num | Строка. Номер исправления |
| parent_id, overcome_id, undercome_id | Число. Ид связанных документов: родительского поступления и корректировок излишков и недостач |
| request_id | Число. Ид заявки на пополнение запасов, по которой создано поступление |
| znak_document_id, znak_status, znak_acceptance_type | Данные подтверждения в системе маркировки |
| attribute1 … attribute15 | Строка. Значения гибких полей документа |
Строки (при withitems=1: список items, каждая строка в объекте item; зависит от настроенных гибких полей товарного остатка)
| line_id | Число. Ид строки |
| item_id | Число. Ид товара |
| item_ext_id | Строка. Код товара во внешней системе |
| item_name | Строка. Название товара |
| quantity | Строка. Принятое количество |
| quantity_expected | Строка. Ожидаемое количество по накладной |
| barcode | Строка. Штрихкод по накладной |
| price | Строка. Закупочная цена |
| amount | Строка. Сумма по строке |
| vat_rate, vat_sum, sum_minus_vat | Строка. Ставка НДС, сумма НДС и сумма без НДС |
| manuf_date, expir_date | Дата изготовления и срок годности |
| lot_number | Строка. Серия (партия) |
| external_id | Строка. Код строки во внешней системе |
| guid | Строка. Уникальный идентификатор строки |
| onhand_id | Число. Ид товарного остатка; заполняется после принятия |
Корректировка (при withadjustment=1, объект adjustment; пустой список, если корректировки нет)
| id | Ид корректировки поступления |
| title | Название корректировки |
| created_date | Дата создания |
| items | Строки корректировки: line_id, item_id, item_ext_id, item_name, quantity (фактическое количество), quantity_expected (ожидаемое) |
Пример ответа
{
"success": 1,
"type": "inflow",
"count": 1,
"days_limit": 30,
"inflows": [
{
"inflow": {
"id": 21230,
"warehouse_id": 6,
"supplier_id": 145,
"waybill": "118",
"docdate": "2026-09-01 00:00:00",
"status": "accept",
"comment": "Поставка сентября",
"created_date": "2026-09-01 10:14:02",
"created_by": null,
"last_update_date": "2026-09-01 10:20:11",
"last_update_by": null,
"external_id": "1C-321",
"accept_date": "2026-09-01 00:00:00",
"factura_invoice_num": "",
"factura_invoice_date": null,
"UPD_num": "",
"UPD_date": null,
"correction_num": null,
"guid": "803AD8B6-688C-11E7-849D-74D435EE6043",
"supplier_external_id": "S-212",
"supplier_name": "Мой поставщик",
"supplier_inn": "1234567890",
"supplier_kpp": "111",
"supplier_type": 2,
"supplier_readonly_inflow": 0,
"warehouse_external_id": "WH-111",
"items": [
{
"item": {
"line_id": 252894,
"item_id": 431,
"item_ext_id": "ITEM-431",
"item_name": "Открытка с шоколадом",
"quantity": "68.000",
"quantity_expected": "68.000",
"barcode": null,
"price": "65.0000",
"amount": "4420.00",
"manuf_date": null,
"expir_date": null,
"lot_number": null,
"external_id": null,
"vat_rate": "20.00",
"vat_sum": "736.67",
"sum_minus_vat": "3683.33",
"guid": "3A148213-7184-B497-9C31-566F439CED63",
"onhand_id": 171567
}
}
],
"adjustment": [],
"amount": "4420.00"
}
}
]
}
В примере для краткости опущены гибкие поля attribute1…attribute15 и связанные документы (parent_id, request_id и другие).
Тот же документ при format=xml (сокращённо):
<?xml version="1.0" encoding="UTF-8"?> <root> <success>1</success> <type>inflow</type> <count>1</count> <inflows> <inflow> <id>21230</id> <warehouse_id>6</warehouse_id> <docdate>2026-09-01 00:00:00</docdate> <status>accept</status> <!-- остальные поля шапки --> <items> <item> <line_id>252894</line_id> <item_id>431</item_id> <quantity>68.000</quantity> <!-- остальные поля строки --> </item> </items> <adjustment/> <amount>4420.00</amount> </inflow> </inflows> <days_limit>30</days_limit> </root>
Примеры запросов
| Задача | Запрос |
|---|---|
| Документы за последние 30 дней (шапки) | /api/inflow?apikey=MySecret |
| Документы за сентябрь со строками | /api/inflow?apikey=MySecret&datefrom=20260901&dateto=20260930&withitems=1 |
| Один документ по коду из 1С | /api/inflow?apikey=MySecret&external_id=1C-321&days=3650&withitems=1 |
| Новые документы после последнего полученного | /api/inflow?apikey=MySecret&last_id=21230&withitems=1 |
| Документы точки продаж по её коду | /api/inflow?apikey=MySecret&ext_warehouse_id=WH-111&datefrom=20260901 |
| Документы, изменённые за сутки | /api/inflow?apikey=MySecret&last_update_date=20260925 |
Создание и изменение документа
POST https://[компания].myvirtualpos.ru/api/inflow/update?apikey=MySecret&external_id=1C-321&create_if_not_exist=1 warehouse_id=6&supplier_id=145&waybill=118&docdate=2026-09-01&comment=Test
Параметры
| id | Число. Ид изменяемого документа |
| external_id | Строка. Код документа во внешней системе. Если id не указан, по нему ищется документ; одновременно это поле документа, при создании оно сохраняется |
| create_if_not_exist | 1 — создать документ, если он не найден. Новый документ создаётся в статусе черновика. Без параметра при отсутствии документа будет ошибка |
| warehouse_id | Число. Ид точки продаж. Обязателен при создании |
| warehouse_external_id | Строка. Код точки продаж во внешней системе. Заменяет warehouse_id, если точка с таким кодом найдена; если не найдена, параметр молча игнорируется |
| supplier_id | Число. Ид поставщика. Обязателен при создании |
| supplier_external_id | Строка. Код поставщика во внешней системе. Работает так же, как warehouse_external_id |
| waybill | Строка. Номер накладной. Обязателен при создании |
| docdate | Дата документа в формате гггг-мм-дд. Обязателен при создании. Формат дд.мм.гггг не принимается: придёт ошибка сохранения |
| status | Статус документа. Документ сначала сохраняется, затем переводится в этот статус. Правила переходов — в разделе «Статусы документа» |
| comment, accept_date, factura_invoice_num, factura_invoice_date, UPD_num, UPD_date, correction_num, guid, request_id | Остальные поля документа, как в ответе метода получения |
| attribute1 … attribute15 | Значения гибких полей документа |
Изменяются только переданные параметры, остальные остаются прежними. Строки документа этим методом не меняются — для этого есть updateItems и batchUpdate.
Ответ
{"success":1,"id":"21230","isnew":"1"}
| success | 1 — документ сохранён |
| id | Ид документа. При создании приходит строкой, при изменении — числом |
| isnew | «1» — документ создан, «0» — изменён существующий |
Смена статуса выполняется вместе с сохранением. При переводе в accept или complete документ принимается на склад: должна быть хотя бы одна строка, а все строки должны ссылаться на существующие товары, иначе придёт ошибка и статус не изменится. Если сохранить не удалось, вся операция отменяется.
Массовое обновление
Метод создаёт документы вместе со строками одним запросом. Данные передаются в параметре batch в формате XML, поэтому используйте POST.
POST https://[компания].myvirtualpos.ru/api/inflow/batchUpdate?apikey=MySecret batch=<root><inflows>...</inflows></root>
Структура batch:
<root> <inflows> <inflow> <external_id>1C-321</external_id> <waybill>118</waybill> <warehouse_external_id>WH-111</warehouse_external_id> <supplier_external_id>S-212</supplier_external_id> <docdate>2026-09-01</docdate> <comment>Поставка</comment> <status>accept</status> <items> <item> <item_ext_id>ITEM-431</item_ext_id> <quantity>68</quantity> <quantity_expected>68</quantity_expected> <cogs>65</cogs> <lot_number>A1</lot_number> </item> </items> </inflow> </inflows> </root>
Правила обработки:
- Документ ищется по
id, а если его нет — поexternal_id. Если найти не удалось, создаётся новый черновик с полями из XML. Точка продаж и поставщик задаются кодамиwarehouse_external_idиsupplier_external_idили идwarehouse_idиsupplier_id. - Шапка существующего документа не обновляется: для найденных документов применяются только строки и статус.
- Строка ищется по
idстроки, а если его нет — поitem_ext_idсреди строк этого документа. Если строки нет, создаётся новая поitem_idилиitem_ext_id(с учётомlot_number). Поля строки — как в методеupdateItems. - Статус (
status) применяется в последнюю очередь, после строк. - Вся загрузка выполняется в одной транзакции: при любой ошибке не сохраняется ничего.
Один документ на элемент <inflows>. Метод берёт из каждого элемента <inflows> только первый <inflow>. Чтобы загрузить несколько документов, повторите сам элемент <inflows> для каждого документа. Это же относится к строкам: если у документа несколько строк одного товара с разными сериями, а поиск ведётся по item_ext_id, строка будет найдена по товару без учёта серии, и вторая строка перезапишет первую. Для таких строк указывайте item_id и lot_number.
Ответ: {«success»:1}.
Удаление документа
GET https://[компания].myvirtualpos.ru/api/inflow/delete?apikey=MySecret&id=21230
| id | Число. Ид удаляемого документа. Только GET |
| external_id | Строка. Код документа во внешней системе. Только GET |
Удалить можно только документ в статусе draft. Ответ: {«success»:1,«id»:21230}.
Принятие и откат принятия
GET https://[компания].myvirtualpos.ru/api/inflow/accepting?apikey=MySecret&id=21230 GET https://[компания].myvirtualpos.ru/api/inflow/rollback?apikey=MySecret&id=21230
| id | Число. Ид документа. Только GET |
| external_id | Строка. Код документа во внешней системе. Только GET |
Ответ обоих методов: {«success»:1,«id»:21230}.
- accepting принимает документ из статуса
draftсразу в статусaccept: добавляет количество из строк в остатки склада, пересчитывает закупочную цену остатка и записывает движение товара. Условия: в документе есть хотя бы одна строка, нет пустых строк без товара, все товары существуют в ассортименте. - rollback отменяет принятие документа из статуса
accept: возвращает остатки к прежним значениям и переводит документ вdraft. Документ в статусеcompleteоткатить нельзя.
Строки документа
updateItems. Создать или изменить строку
POST https://[компания].myvirtualpos.ru/api/inflow/updateItems?apikey=MySecret&create_if_not_exist=1 inflow_id=21230&item_id=431&quantity=68&quantity_expected=68&cogs=65
| id | Число. Ид строки |
| external_id | Строка. Код строки во внешней системе. Если id не указан, по нему ищется строка; одновременно это поле строки |
| create_if_not_exist | 1 — добавить строку, если она не найдена |
| inflow_id | Число. Ид документа. Обязателен при создании строки |
| item_id | Число. Ид товара. При создании нужно указать item_id или item_ext_id |
| item_ext_id | Строка. Код товара во внешней системе. Используется, если не указан item_id |
| lot_number | Строка. Серия (партия). Строка с той же парой «товар + серия» в документе одна: повторный запрос вернёт уже существующую |
| quantity | Число. Принятое количество |
| quantity_expected | Число. Ожидаемое количество |
| cogs | Число. Закупочная цена. Сумма строки пересчитывается |
| barcode, manuf_date, expir_date, vat_rate, vat_sum, sum_minus_vat, guid, recommended_retail_price | Остальные поля строки, как в структуре ответа |
| attribute1 … attribute15 | Значения гибких полей товарного остатка |
Ответ: {«success»:1,«id»:«252927»,«isnew»:«1»}. id — ид строки, isnew — создана ли строка.
Числа проверяйте до отправки. Нечисловое значение в quantity или cogs ошибки не вызывает: запрос завершается успешно, а значение сохраняется как 0. Принимать документ с такими строками не стоит. Также ссылка на несуществующий item_id не отклоняется при добавлении: ошибка появится только при принятии документа.
deleteItems. Удалить строку
GET https://[компания].myvirtualpos.ru/api/inflow/deleteItems?apikey=MySecret&id=252927
| id | Число. Ид строки. Только GET |
| external_id | Строка. Код строки во внешней системе. Только GET |
Ответ: {«success»:1,«id»:252927}.
Загрузка накладной файлом
Метод принимает файлы накладных в формате CSV и ставит их в очередь на обработку: поступления создаются из файлов позже, а не в момент вызова. Запрос отправляется методом POST с типом multipart/form-data; можно приложить несколько файлов.
POST https://[компания].myvirtualpos.ru/api/inflow/upload?apikey=MySecret&waybill=118&warehouse_id=6&supplier_id=145&encoding=utf8 file=@nakladnaya.csv
Параметры
| waybill | Строка. Номер накладной. Обязателен |
| supplier_id | Число. Ид поставщика. Обязателен |
| supplier_external_id | Строка. Код поставщика во внешней системе. Можно использовать вместо supplier_id |
| warehouse_id | Число. Ид точки продаж. Обязателен |
| warehouse_external_id | Строка. Код точки продаж во внешней системе. Можно использовать вместо warehouse_id |
| docdate | Дата ГГГГММДД. По умолчанию — текущая дата |
| encoding | Кодировка файла: cp1251 (по умолчанию) или utf8 |
| unique | true (по умолчанию) — не принимать накладную, которая с таким номером, точкой продаж и поставщиком уже загружалась; false — не проверять |
| phone | Строка. Телефон клиента, если из поступления создаётся заказ |
| order | Строка. Номер заказа, если из поступления создаётся заказ |
Формат файла
Файл в формате CSV с разделителем «точка с запятой». Первая строка — заголовки столбцов, остальные — строки накладной. Пример:
Количество;Количество ожидаемое;Цена закупки;Цена закупки без НДС;Сумма закупки;Штрихкод;Серия;Годен до;ID товара у Поставщика;Название товара у поставщика;Ставка НДС;Сумма НДС;Сумма без НДС;Производитель поставщика 1;1;556.94;506.31;556.94;5000456022453;ACAT;01.11.2027;10735;Товар 1;10;50.63;506.31;Производитель 1
Набор столбцов зависит от настроек загрузки накладных в вашей системе.
Ответ
{"success":1,"files":["74e474f98c55579e5f0bc72123da2b68.csv"]}
| success | 1 — файлы приняты |
| files | Имена временных файлов, в которых сохранены загруженные накладные. Из них позже будут созданы поступления |
Ошибки
Ошибка авторизации и общие ошибки описаны в статье Общие сведения. Ошибки методов раздела приходят с кодом HTTP 200 и success равным 0:
| Сообщение | Метод | Причина | Что делать |
|---|---|---|---|
| Incorrect date format '…'. Valid format is: YYYYMMDD | получение | Дата в параметре не в формате ГГГГММДД | Передайте дату как 20260901 |
| Укажите [id] или [external_id] для обновления\создания записи | update | Нет id, external_id и create_if_not_exist | Передайте идентификатор или create_if_not_exist=1 |
| You have to specify [id] or [external_id] to update record | updateItems | То же для строки | Передайте идентификатор строки или create_if_not_exist=1 |
| Record not found, Запись не найдена | update, delete, accepting, rollback, deleteItems, updateItems | Документ или строка не найдены | Проверьте ид или код |
| Ошибка в данных. … | update | Не заполнены обязательные поля (точка продаж, поставщик, накладная, дата), значение слишком длинное | Исправьте указанные поля |
| Cannot save data. … | update, updateItems | Ошибка сохранения; например, дата не в формате гггг-мм-дд, не указан товар при создании строки | Проверьте формат и обязательные параметры; текст после точки поясняет причину |
| Невозможно сохранить поступление в выбранном статусе … | update, batchUpdate | Не удалось перевести документ в статус: неизвестный статус, возврат назад, нет строк, товара нет в ассортименте | Исправьте причину, указанную в тексте |
| Укажите номер поступления для которого требуется создать запись о товара | updateItems | Документ с inflow_id не найден | Проверьте inflow_id |
| Data validation failed. … | batchUpdate, updateItems | Данные документа или строки не прошли проверку | Исправьте указанные поля |
| Parameter 'batch' not found | batchUpdate | Не передан параметр batch | Передайте XML в параметре batch |
| Warehouse with external_id … not found, Supplier with external_id … not found, Item with external_id … not found | batchUpdate | Не найдены точка продаж, поставщик или товар по коду | Проверьте коды во внешней системе |
| Inflow status is not draft | delete | Удалять можно только черновик | Откатите документ (rollback) и удалите |
| Inflow was already accepted | accepting | Документ уже принят | Ничего делать не нужно |
| Accepting failed. … | accepting | Нет строк, есть пустые строки или товары, которых нет в ассортименте | Исправьте документ, текст после точки поясняет причину |
| Inflow was not accepted or has been already rollbacked | rollback | Документ не в статусе accept | Откат возможен только для принятого документа |
| Не указан документ поступления | upload | Не передан waybill | Передайте номер накладной |
| Не передан идентификатор поставщика / точки продаж | upload | Не указаны ни ид, ни внешний код | Передайте supplier_id или warehouse_id |
| Поставщик … / Точка продаж … не найден(а) | upload | Нет записи с таким ид или кодом | Проверьте значения |
| Поступление … указанного склада и поставщика уже было загружено | upload | Накладная с таким номером уже загружалась | Передайте unique=false, если загрузка повторная |
| You have to specify [id] or [external_id] to delete/accept/rollback… | delete, accepting, rollback, deleteItems | Нет параметров поиска | Передайте id или external_id |
Если по фильтрам ничего не найдено, метод получения возвращает успешный ответ с count равным 0 и пустым списком inflows.