Быстрый склад API

Быстрый склад API

HTTP API для первого работающего среза складского учёта. Это описание отражает реализованные маршруты; полный продуктовый план находится в соседнем репозитории prompts.

Как получить доступ

Войдите в приложение, откройте Настройки → API-токены и создайте токен для интеграции. Скопируйте его сразу: секрет показывается только при выпуске. Вызовы API передают Authorization: Bearer <токен>. Токен можно отозвать в настройках. Эта спецификация описывает маршруты интеграции с Bearer; вход пользователя и управление токенами остаются в сессионном API приложения.

Документация на отдельном порту отправляет запросы через прокси к API и не использует сессию приложения. Введите токен в поле сверху, выберите метод и нажмите Выполнить. Токен хранится только в памяти открытой страницы.

Запись данных

Для команд требуется заголовок Idempotency-Key длиной от 8 до 120 символов. Повтор той же команды с тем же ключом возвращает прежний ответ; другая команда с таким ключом отклоняется. В примерах замените replace-with-unique-key своим уникальным значением. Просмотрщик создаёт новый ключ, который можно изменить перед запросом.

Суммы передаются числом в основных денежных единицах с точностью до двух знаков. Заменяйте replace-with-id идентификаторами связанных сущностей из ответов API. Пустой склад не содержит демонстрационных товаров или документов.

Машиночитаемая спецификация

Актуальный контракт доступен по /openapi.json. Его можно импортировать в любой клиент OpenAPI 3.1. Справочник ниже автоматически собран из этого контракта; примеры запросов строятся из схем полей.

Как устроены складские данные

Фильтры и товары

Фильтр и его значения — самостоятельные записи компании. Они сохраняются, даже если ими не пользуется ни один товар. Товар может ссылаться на значения через filterValueIds; назначение фильтра не создаёт отдельную складскую позицию. Для набора фильтров каталог принимает повторяющийся параметр valueId.

Товар имеет основной тип цены и может иметь дополнительные цены в prices. Отсутствующая цена выбранного типа остаётся отсутствующей: API не подставляет другую автоматически.

Комплекты

Комплект создаётся как товар с kind: "bundle" и непустым components. Компонентами пока могут быть только действующие обычные товары. Комплект не имеет собственных партий; доступное количество считается по его компонентам на выбранном складе. Заказ сохраняет снимок состава, поэтому дальнейшее изменение карточки не меняет старый заказ.

Склады

Название, краткое название, город и адрес склада меняются через PATCH /api/v1/warehouses/{warehouseId}. archived: true убирает склад из новых операций, сохраняя историю. Перед архивированием нужно вывести остаток и завершить открытые заказы. Пустой склад без ссылок можно удалить через DELETE; последний действующий склад удалить или архивировать нельзя.

Заказы и остатки

Перед закупкой создайте поставщика и товар; перед заказом покупателя — покупателя и достаточный доступный остаток. В partners/resolve для поиска или создания контрагента нужен телефон или email. Поле customer или supplier содержит сохранённое имя контрагента. Заказ покупателя резервирует доступное количество, но не уменьшает физический остаток. Подтверждённая отгрузка списывает партии. Приёмка увеличивает остаток только на годное количество; брак и недостача хранятся отдельно. Списание и перемещение расходуют партии по FIFO либо по явно выбранной партии. История операций сохраняется в аудите.

Загруженные закупочные документы

Файл можно отклонить через DELETE /api/v1/procurement/imports/{importId} с JSON {} и Idempotency-Key, пока из него не создан закупочный документ. Файл исчезает из очереди, его распознавание отменяется, отказ записывается в аудит. Остатки и закупки не меняются. Исходные байты остаются в общем хранилище: тот же файл может использоваться другими вложениями. При необходимости его можно загрузить заново с новым ключом. Если черновик уже создан, API возвращает 409 ALREADY_IMPORTED; отмена закупки выполняется через сам документ.

Для файлов в очереди или обработке GET /api/v1/procurement/imports возвращает recognition: фактическое прошедшее время elapsedSeconds, место в очереди queuePosition, число замеров sampleCount и приблизительное время до готовности estimatedRemainingSeconds. Оценка использует среднюю длительность последних десяти успешных распознаваний этой компании текущей моделью и учитывает файлы перед текущим. До первого успешного замера оценка равна null. Если текущий или предшествующий файл обрабатывается дольше среднего времени, estimateExceeded становится true, а оценка — null. Фактические начало и длительность обработки сохраняются в extraction.recognition; ошибки подключения и старые импорты без замеров не используются как образцы скорости.

Перенос данных из МойСклада

Откройте Настройки → Импорт из МойСклада в приложении. Введите токен с правами чтения, проверьте подключение, выберите данные и подготовьте предварительный отчёт. Склад на этом этапе не меняется. Просмотрите ошибки/замечания, подтвердите состав и нажмите «Перенести». Можно приостановить или продолжить задачу; после закрытия страницы сервер продолжает работу. Отмена останавливает дальнейшую запись, сохраняя уже перенесённые сущности. Повторный импорт узнаёт их по ID МойСклада и сохраняет локальные изменения.

Поддерживаются товары/услуги/модификации/комплекты, цены и простые дополнительные поля, контрагенты с контактами/счетами, склады и организации. Закупки переносятся черновиками: историческое проведение, остатки, резервы, оплаты, договоры и связи документов автоматически не переносятся. Чтобы номера разных типов не конфликтовали, добавляются префиксы МС-ЗП-, МС-СЧ-, МС-ПР-. Исходный номер, сложные дополнительные сведения и ссылки на фото/вложения сохраняются в JSON-отчёте. Цены поддерживаются в рублях; неизвестная валюта не считается рублём.

Сервер отправляет запросы последовательно с интервалом минимум 5,1 секунды, включая проверку соединения и повторные попытки. Это не более двух запросов за любое окно десять секунд внутри нашей системы. Ожидание, указанное МойСкладом при ограничении скорости, увеличивает паузу. Запросы иных приложений с тем же токеном находятся вне этого ограничителя.

Управление импортом требует сессии владельца. API-токен Быстрого склада для этих маршрутов не подходит; интерактивная документация направляет в приложение. Токен МойСклада хранится зашифрованным и никогда не появляется в ответах. Пока миграция 015 не применена, вкладка сообщает об ожидающем обновлении базы.

Справочник методов

Цены

POST /api/v1/price-types

Создать тип цены

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "name": "Название"

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/price-types' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"name":"Название"}'

PATCH /api/v1/price-types/{priceTypeId}

Изменить тип цены

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "name": "Название",

  "archived": false

}

Запрос curl, полученный из спецификации:


curl -X PATCH 'http://127.0.0.1:18576/api/v1/price-types/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"name":"Название","archived":false}'

Типы цен

DELETE /api/v1/price-types/{priceTypeId}

Удалить тип цены и его цены товаров

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X DELETE 'http://127.0.0.1:18576/api/v1/price-types/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

Фильтры

POST /api/v1/filters

Создать фильтр

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "name": "Название"

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/filters' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"name":"Название"}'

PATCH /api/v1/filters/{filterId}

Изменить фильтр

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "name": "Название",

  "archived": false

}

Запрос curl, полученный из спецификации:


curl -X PATCH 'http://127.0.0.1:18576/api/v1/filters/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"name":"Название","archived":false}'

DELETE /api/v1/filters/{filterId}

Удалить фильтр, значения и привязки к товарам

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X DELETE 'http://127.0.0.1:18576/api/v1/filters/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

POST /api/v1/filters/{filterId}/values

Добавить значение

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "name": "Название"

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/filters/replace-with-id/values' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"name":"Название"}'

PATCH /api/v1/filters/{filterId}/values/{valueId}

Изменить значение

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "name": "Название",

  "archived": false

}

Запрос curl, полученный из спецификации:


curl -X PATCH 'http://127.0.0.1:18576/api/v1/filters/replace-with-id/values/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"name":"Название","archived":false}'

DELETE /api/v1/filters/{filterId}/values/{valueId}

Удалить значение и его привязки к товарам

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X DELETE 'http://127.0.0.1:18576/api/v1/filters/replace-with-id/values/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

Товары

POST /api/v1/products

Создать товар или комплект

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "name": "Товар"

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/products' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"name":"Товар"}'

PATCH /api/v1/products/{productId}

Изменить товар или комплект

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "name": "Товар"

}

Запрос curl, полученный из спецификации:


curl -X PATCH 'http://127.0.0.1:18576/api/v1/products/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"name":"Товар"}'

DELETE /api/v1/products/{productId}

Удалить товар без операций и связей

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X DELETE 'http://127.0.0.1:18576/api/v1/products/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

DELETE /api/v1/products/{productId}/images/{imageId}

Удалить фотографию

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X DELETE 'http://127.0.0.1:18576/api/v1/products/replace-with-id/images/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

GET /api/v1/catalog

Каталог с фильтрами и типом цены

Параметры:

Запрос curl, полученный из спецификации:


curl -X GET 'http://127.0.0.1:18576/api/v1/catalog' \

  -H 'Authorization: Bearer <API_TOKEN>'

GET /api/v1/images/{imageId}

Получить оригинал фотографии

Параметры:

Запрос curl, полученный из спецификации:


curl -X GET 'http://127.0.0.1:18576/api/v1/images/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>'

POST /api/v1/products/{productId}/images

Загрузить фотографию

Параметры:

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/products/replace-with-id/images' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: image/jpeg' \

  --data-binary @image.jpg

Контрагенты

POST /api/v1/partners

Создать контрагента

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "name": "Название"

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/partners' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"name":"Название"}'

PATCH /api/v1/partners/{partnerId}

Изменить контрагента

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X PATCH 'http://127.0.0.1:18576/api/v1/partners/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

DELETE /api/v1/partners/{partnerId}

Удалить контрагента без связей

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X DELETE 'http://127.0.0.1:18576/api/v1/partners/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

POST /api/v1/partners/resolve

Найти или создать контрагента

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "name": "Контрагент",

  "type": "Поставщик",

  "phone": "+70000000000"

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/partners/resolve' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"name":"Контрагент","type":"Поставщик","phone":"+70000000000"}'

Организации

POST /api/v1/organizations

Создать собственное юридическое лицо

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "name": "Название"

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/organizations' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"name":"Название"}'

PATCH /api/v1/organizations/{organizationId}

Изменить собственное юридическое лицо

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X PATCH 'http://127.0.0.1:18576/api/v1/organizations/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

DELETE /api/v1/organizations/{organizationId}

Удалить организацию без связей

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X DELETE 'http://127.0.0.1:18576/api/v1/organizations/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

Договоры

POST /api/v1/contracts

Создать договор

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "partnerId": "replace-with-id",

  "organizationId": "replace-with-id",

  "kind": "purchase"

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/contracts' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"partnerId":"replace-with-id","organizationId":"replace-with-id","kind":"purchase"}'

PATCH /api/v1/contracts/{contractId}

Изменить договор

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X PATCH 'http://127.0.0.1:18576/api/v1/contracts/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

DELETE /api/v1/contracts/{contractId}

Удалить договор без связей

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X DELETE 'http://127.0.0.1:18576/api/v1/contracts/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

Дополнительные поля

POST /api/v1/custom-fields

Создать определение поля

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "entityKind": "product",

  "name": "Название",

  "valueType": "string"

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/custom-fields' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"entityKind":"product","name":"Название","valueType":"string"}'

PATCH /api/v1/custom-fields/{fieldId}

Изменить определение поля

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X PATCH 'http://127.0.0.1:18576/api/v1/custom-fields/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

DELETE /api/v1/custom-fields/{fieldId}

Удалить поле без сохранённых значений

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X DELETE 'http://127.0.0.1:18576/api/v1/custom-fields/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

Интеграции

POST /api/v1/external-links

Связать внешний ID

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "source": "shop",

  "entityType": "product",

  "externalId": "external-123",

  "internalId": "replace-with-id"

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/external-links' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"source":"shop","entityType":"product","externalId":"external-123","internalId":"replace-with-id"}'

GET /api/v1/external-links

Найти связь по внешнему ID

Параметры:

Запрос curl, полученный из спецификации:


curl -X GET 'http://127.0.0.1:18576/api/v1/external-links?source=shop&entityType=product&externalId=external-123' \

  -H 'Authorization: Bearer <API_TOKEN>'

GET /api/v1/integrations/moysklad

Подключение и история импорта МойСклада (сессия владельца)

Запрос curl, полученный из спецификации:


curl -X GET 'http://127.0.0.1:18574/api/v1/integrations/moysklad' \

  --cookie 'bs_session=<SESSION_COOKIE>'

POST /api/v1/integrations/moysklad/connection

Проверить и сохранить шифрованный токен МойСклада

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "token": "<MOYSKLAD_TOKEN>"

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18574/api/v1/integrations/moysklad/connection' \

  --cookie 'bs_session=<SESSION_COOKIE>' \

  -H 'Origin: http://127.0.0.1:18573' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"token":"<MOYSKLAD_TOKEN>"}'

DELETE /api/v1/integrations/moysklad/connection

Отключить МойСклад после завершения задач

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X DELETE 'http://127.0.0.1:18574/api/v1/integrations/moysklad/connection' \

  --cookie 'bs_session=<SESSION_COOKIE>' \

  -H 'Origin: http://127.0.0.1:18573' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

POST /api/v1/integrations/moysklad/jobs

Подготовить возобновляемый предварительный отчёт; склад не изменяется

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "products": true,

  "partners": true,

  "warehouses": true,

  "organizations": true,

  "purchases": false

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18574/api/v1/integrations/moysklad/jobs' \

  --cookie 'bs_session=<SESSION_COOKIE>' \

  -H 'Origin: http://127.0.0.1:18573' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"products":true,"partners":true,"warehouses":true,"organizations":true,"purchases":false}'

POST /api/v1/integrations/moysklad/jobs/{jobId}/pause

Приостановить импорт

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18574/api/v1/integrations/moysklad/jobs/replace-with-id/pause' \

  --cookie 'bs_session=<SESSION_COOKIE>' \

  -H 'Origin: http://127.0.0.1:18573' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

POST /api/v1/integrations/moysklad/jobs/{jobId}/resume

Продолжить с checkpoint

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18574/api/v1/integrations/moysklad/jobs/replace-with-id/resume' \

  --cookie 'bs_session=<SESSION_COOKIE>' \

  -H 'Origin: http://127.0.0.1:18573' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

POST /api/v1/integrations/moysklad/jobs/{jobId}/cancel

Отменить дальнейший перенос; созданные данные сохраняются

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18574/api/v1/integrations/moysklad/jobs/replace-with-id/cancel' \

  --cookie 'bs_session=<SESSION_COOKIE>' \

  -H 'Origin: http://127.0.0.1:18573' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

POST /api/v1/integrations/moysklad/jobs/{jobId}/apply

Начать запись после готового preview; закупки только черновиками

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18574/api/v1/integrations/moysklad/jobs/replace-with-id/apply' \

  --cookie 'bs_session=<SESSION_COOKIE>' \

  -H 'Origin: http://127.0.0.1:18573' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

GET /api/v1/integrations/moysklad/jobs/{jobId}/rows

Страница отчёта; source=true включает сохранённый исходный снимок

Параметры:

Запрос curl, полученный из спецификации:


curl -X GET 'http://127.0.0.1:18574/api/v1/integrations/moysklad/jobs/replace-with-id/rows' \

  --cookie 'bs_session=<SESSION_COOKIE>'

Склады

POST /api/v1/warehouses

Создать склад

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "name": "Название"

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/warehouses' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"name":"Название"}'

PATCH /api/v1/warehouses/{warehouseId}

Изменить или архивировать склад

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "name": "Новое название склада"

}

Запрос curl, полученный из спецификации:


curl -X PATCH 'http://127.0.0.1:18576/api/v1/warehouses/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"name":"Новое название склада"}'

DELETE /api/v1/warehouses/{warehouseId}

Удалить пустой склад

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X DELETE 'http://127.0.0.1:18576/api/v1/warehouses/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

Закупки

POST /api/v1/purchases

Создать заказ поставщику

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "productId": "replace-with-id",

  "warehouseId": "replace-with-id",

  "supplier": "Поставщик",

  "quantity": 1,

  "unitCost": 800

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/purchases' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"productId":"replace-with-id","warehouseId":"replace-with-id","supplier":"Поставщик","quantity":1,"unitCost":800}'

DELETE /api/v1/purchases/{purchaseId}

Удалить закупку без приёмки

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X DELETE 'http://127.0.0.1:18576/api/v1/purchases/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

POST /api/v1/procurement/documents

Создать многострочный документ

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "kind": "purchase_order",

  "lines": [

    {

      "productId": "replace-with-id",

      "quantity": 1,

      "unitCost": 800

    }

  ]

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/procurement/documents' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"kind":"purchase_order","lines":[{"productId":"replace-with-id","quantity":1,"unitCost":800}]}'

PATCH /api/v1/procurement/documents/{documentId}

Изменить черновик

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X PATCH 'http://127.0.0.1:18576/api/v1/procurement/documents/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

DELETE /api/v1/procurement/documents/{documentId}

Удалить непроведённый документ без зависимых документов

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X DELETE 'http://127.0.0.1:18576/api/v1/procurement/documents/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

PATCH /api/v1/procurement/documents/{documentId}/status

Провести, закрыть или отменить документ

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "status": "posted"

}

Запрос curl, полученный из спецификации:


curl -X PATCH 'http://127.0.0.1:18576/api/v1/procurement/documents/replace-with-id/status' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"status":"posted"}'

POST /api/v1/procurement/imports/{importId}/recognize

Повторить локальное распознавание файла

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/procurement/imports/replace-with-id/recognize' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

DELETE /api/v1/procurement/imports/{importId}

Отклонить загруженный файл без созданного документа

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X DELETE 'http://127.0.0.1:18576/api/v1/procurement/imports/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

POST /api/v1/procurement/imports/{importId}/document

Создать черновик из распознанного файла

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "kind": "purchase_order",

  "lines": [

    {

      "productId": "replace-with-id",

      "quantity": 1,

      "unitCost": 800

    }

  ]

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/procurement/imports/replace-with-id/document' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"kind":"purchase_order","lines":[{"productId":"replace-with-id","quantity":1,"unitCost":800}]}'

POST /api/v1/procurement/payments

Создать платёж

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "partnerId": "replace-with-id",

  "direction": "outgoing",

  "method": "bank",

  "amount": 800

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/procurement/payments' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"partnerId":"replace-with-id","direction":"outgoing","method":"bank","amount":800}'

PATCH /api/v1/procurement/payments/{paymentId}

Изменить черновик платежа

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X PATCH 'http://127.0.0.1:18576/api/v1/procurement/payments/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

DELETE /api/v1/procurement/payments/{paymentId}

Удалить непроведённый платёж

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X DELETE 'http://127.0.0.1:18576/api/v1/procurement/payments/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

PATCH /api/v1/procurement/payments/{paymentId}/status

Провести или отменить платёж

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "status": "posted"

}

Запрос curl, полученный из спецификации:


curl -X PATCH 'http://127.0.0.1:18576/api/v1/procurement/payments/replace-with-id/status' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"status":"posted"}'

GET /api/v1/procurement/imports

Список загруженных закупочных файлов

Запрос curl, полученный из спецификации:


curl -X GET 'http://127.0.0.1:18576/api/v1/procurement/imports' \

  -H 'Authorization: Bearer <API_TOKEN>'

POST /api/v1/procurement/imports

Загрузить файл закупки для локального распознавания

Параметры:

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/procurement/imports' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: image/jpeg' \

  --data-binary @image.jpg

GET /api/v1/procurement/imports/{importId}/file

Оригинал закупочного файла

Параметры:

Запрос curl, полученный из спецификации:


curl -X GET 'http://127.0.0.1:18576/api/v1/procurement/imports/replace-with-id/file' \

  -H 'Authorization: Bearer <API_TOKEN>'

Продажи

POST /api/v1/orders

Создать заказ покупателя

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "customer": "Покупатель",

  "warehouseId": "replace-with-id",

  "channel": "Сайт",

  "items": [

    {

      "productId": "replace-with-id",

      "quantity": 1

    }

  ]

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/orders' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"customer":"Покупатель","warehouseId":"replace-with-id","channel":"Сайт","items":[{"productId":"replace-with-id","quantity":1}]}'

PATCH /api/v1/orders/{orderId}/status

Сменить статус заказа

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "status": "picking"

}

Запрос curl, полученный из спецификации:


curl -X PATCH 'http://127.0.0.1:18576/api/v1/orders/replace-with-id/status' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"status":"picking"}'

DELETE /api/v1/orders/{orderId}

Удалить неотгруженный заказ и снять резерв

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{}

Запрос curl, полученный из спецификации:


curl -X DELETE 'http://127.0.0.1:18576/api/v1/orders/replace-with-id' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{}'

Остатки

POST /api/v1/stock/receipt

Принять товар

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "productId": "replace-with-id",

  "warehouseId": "replace-with-id",

  "supplier": "Поставщик",

  "quantity": 1,

  "unitCost": 800

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/stock/receipt' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"productId":"replace-with-id","warehouseId":"replace-with-id","supplier":"Поставщик","quantity":1,"unitCost":800}'

POST /api/v1/stock/writeoff

Списать товар

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "productId": "replace-with-id",

  "warehouseId": "replace-with-id",

  "quantity": 1,

  "reason": "Причина"

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/stock/writeoff' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"productId":"replace-with-id","warehouseId":"replace-with-id","quantity":1,"reason":"Причина"}'

POST /api/v1/stock/transfer

Переместить товар

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "productId": "replace-with-id",

  "warehouseId": "replace-with-id",

  "toWarehouseId": "replace-with-id",

  "quantity": 1

}

Запрос curl, полученный из спецификации:


curl -X POST 'http://127.0.0.1:18576/api/v1/stock/transfer' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"productId":"replace-with-id","warehouseId":"replace-with-id","toWarehouseId":"replace-with-id","quantity":1}'

Настройки

PATCH /api/v1/settings

Изменить настройки компании

Параметры:

Поля JSON:

Тело запроса, полученное из схемы:


{

  "companyName": "Название",

  "lowStockAlerts": true,

  "dailySummary": true

}

Запрос curl, полученный из спецификации:


curl -X PATCH 'http://127.0.0.1:18576/api/v1/settings' \

  -H 'Authorization: Bearer <API_TOKEN>' \

  -H 'Idempotency-Key: replace-with-unique-key' \

  -H 'Content-Type: application/json' \

  --data '{"companyName":"Название","lowStockAlerts":true,"dailySummary":true}'

Состояние

GET /api/v1/bootstrap

Состояние склада

Запрос curl, полученный из спецификации:


curl -X GET 'http://127.0.0.1:18576/api/v1/bootstrap' \

  -H 'Authorization: Bearer <API_TOKEN>'

Аудит

GET /api/v1/audit

Журнал аудита

Параметры:

Запрос curl, полученный из спецификации:


curl -X GET 'http://127.0.0.1:18576/api/v1/audit' \

  -H 'Authorization: Bearer <API_TOKEN>'