openapi: 3.0.0
info:
  title: 'API WMS Celicom'
  description: "\r\n## Общая информация по API Celicom\r\nДанное API предназначено для интеграции складской системы с внешними сервисами.\r\n\r\n### Основные возможности:\r\n* Создание, получение, удаление, отправление в сборку заявок на отгрузку (**DispatchOrders**).\r\n* Создание, получение, удаление заявок на приемку (**UnloadingOrders**).\r\n* Получение заказов FBS c фильтрами по диапазону дат, статусам и id заказов (**Orders**).\r\n* Получение товаров c фильтрами по диапазону дат, статусами, по баркоду, по артикулам (**Items**).\r\n* Чтение и поиск (list/get) по всем остальным документам: заявки на перемещение, возврат, транзит и комплектацию, приёмки, разгрузки, отгрузки, перемещения, комплектации, инвентаризации, обработки возвратов.\r\n* Дополнительные поля, настроенные фулфилментом, — в ответах и при создании документов отдельным объектом **customfields**.\r\n* Интеграция с курьерскими службами (СДЭК, Яндекс Go или самовывоз).\r\n\r\n### Ограничения:\r\n* У запросов есть лимит: 150 в минуту.\r\n* При запросах из бд за один запрос можно получить не более 30 элементов.\r\n\r\n### Авторизация:\r\nВсе запросы должны содержать персональный токен доступа в URL: `/api/{token}/...`\r\n"
  version: 1.0.0
servers:
  -
    url: 'https://{clientName}/'
    description: 'Основной сервер API'
    variables:
      clientName:
        default: test-user.wmscelicom.ru
        description: 'Доменное имя вашего инстанса'
paths:
  '/api/{token}/complectationorders/list/':
    get:
      tags:
        - ComplectationOrders
      summary: 'Список заявок на комплектацию с фильтрацией'
      description: 'Возвращает список документов клиента: шапка (id, дата, статус), позиции и дополнительные поля (customfields). Фильтры ids/status/date, пагинация page/limit (до 30).'
      operationId: 8292119d1986d4caead7203a1be65207
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: ids
          in: query
          description: 'ID документа или JSON-массив ID (например: 123 или [123, 124])'
          required: false
          schema:
            type: string
        -
          name: status
          in: query
          description: 'Числовой статус или JSON-массив статусов (например: 0 или [0, 1])'
          required: false
          schema:
            type: string
        -
          name: date
          in: query
          description: 'Диапазон дат создания JSON-массивом: ["2026-01-01","2026-01-31"]'
          required: false
          schema:
            type: string
        -
          name: page
          in: query
          description: 'Страница (по умолчанию 1)'
          required: false
          schema:
            type: integer
            default: 1
        -
          name: limit
          in: query
          description: 'Записей на страницу (по умолчанию и максимум 30)'
          required: false
          schema:
            type: integer
            default: 30
            maximum: 30
      responses:
        '200':
          description: 'Список документов'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  data: { type: array, items: { properties: { id: { type: integer, example: 101 }, date_time: { type: string, example: '2026-07-01 12:00:00' }, status: { type: integer, example: 0 }, status_text: { type: string, example: Новая }, comment: { type: string, example: '', nullable: true }, customfields: { description: 'Дополнительные поля, настроенные фулфилментом', type: object, example: {} }, items: { type: array, items: { properties: { item_id: { type: integer, example: 55 }, article: { type: string, example: SKU-1 }, barcode: { type: string, example: '4600000000000' }, name: { type: string, example: Товар }, count: { type: integer, example: 2 } }, type: object } } }, type: object } }
                type: object
  '/api/{token}/complectationorders/get/':
    get:
      tags:
        - ComplectationOrders
      summary: 'Получение заявки на комплектацию по ID'
      description: 'Возвращает документ(ы) по ID. Структура ответа как у списка (list), без пагинации.'
      operationId: 80270ab975a0ead4123ed4750312155b
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: id
          in: query
          description: 'ID документа или JSON-массив ID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Документ (структура как у list)'
  '/api/{token}/complectations/list/':
    get:
      tags:
        - Complectations
      summary: 'Список комплектаций с фильтрацией'
      description: 'Возвращает список документов клиента: шапка (id, дата, статус), позиции и дополнительные поля (customfields). Фильтры ids/status/date, пагинация page/limit (до 30).'
      operationId: 85fc7aa98df8b243acb9446f47382eec
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: ids
          in: query
          description: 'ID документа или JSON-массив ID (например: 123 или [123, 124])'
          required: false
          schema:
            type: string
        -
          name: status
          in: query
          description: 'Числовой статус или JSON-массив статусов (например: 0 или [0, 1])'
          required: false
          schema:
            type: string
        -
          name: date
          in: query
          description: 'Диапазон дат создания JSON-массивом: ["2026-01-01","2026-01-31"]'
          required: false
          schema:
            type: string
        -
          name: page
          in: query
          description: 'Страница (по умолчанию 1)'
          required: false
          schema:
            type: integer
            default: 1
        -
          name: limit
          in: query
          description: 'Записей на страницу (по умолчанию и максимум 30)'
          required: false
          schema:
            type: integer
            default: 30
            maximum: 30
      responses:
        '200':
          description: 'Список документов'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  data: { type: array, items: { properties: { id: { type: integer, example: 101 }, date_time: { type: string, example: '2026-07-01 12:00:00' }, status: { type: integer, example: 0 }, status_text: { type: string, example: Новая }, comment: { type: string, example: '', nullable: true }, customfields: { description: 'Дополнительные поля, настроенные фулфилментом', type: object, example: {} }, items: { type: array, items: { properties: { item_id: { type: integer, example: 55 }, article: { type: string, example: SKU-1 }, barcode: { type: string, example: '4600000000000' }, name: { type: string, example: Товар }, count: { type: integer, example: 2 } }, type: object } } }, type: object } }
                type: object
  '/api/{token}/complectations/get/':
    get:
      tags:
        - Complectations
      summary: 'Получение комплектации по ID'
      description: 'Возвращает документ(ы) по ID. Структура ответа как у списка (list), без пагинации.'
      operationId: a772755717938a2d74e312a91348f263
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: id
          in: query
          description: 'ID документа или JSON-массив ID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Документ (структура как у list)'
  '/api/{token}/dispatchorders/add/':
    post:
      tags:
        - DispatchOrders
      summary: 'Создание заявки на отгрузку в система Целиком'
      description: "\r\n### Метод создает заявку на отгрузу в статусе Новая        \r\n        \r\n### Правила заполнения additinfo:\r\n\r\n**1. Для YandexGoGlobal (delivery=4):**\r\n* `pickup_type`: 'custom_location' (до двери) или 'platform_station' (ПВЗ) — **обязательно**.\r\n* `region`: объект с `value` (GeoID) и `textvalue` (Название города) — **обязательно**.\r\n* `recipient_name`, `recipient_lname`, `recipient_email` и `recipient_phones`: данные получателя — **обязательно**.\r\n* **Если `pickup_type` = 'custom_location':**\r\n    * `to_location_street` и `to_location_streetnumber` — **обязательно**.\r\n    * `to_location_streetnumber_corpus`, `to_location_streetnumber_bld`, `to_location_appartment` — опционально.\r\n* **Если `pickup_type` = 'platform_station':**\r\n    * `delivery_point` (код ПВЗ) — **обязательно**.\r\n\r\n**2. Для CDEK (delivery=1):**\r\n* `tariff_code`: код тарифа СДЭК — **обязательно**.\r\n* `recipient_name` и `recipient_phones`: ФИО и телефон (минимум 11 цифр) — **обязательно**.\r\n* `city`: ID города или его название. **Важно:** Если указан ПВЗ, город можно не передавать (определится автоматически).\r\n* **Если тариф 'до склада':** обязателен `delivery_point` (код ПВЗ).\r\n* **Если тариф 'до двери':** обязателен `to_location_address` (полный адрес) И город (ID или название).\r\n* **Автоматика:** Если вы не передали `region` или `city`, система попытается найти их по коду ПВЗ или названию города.\r\n\r\n**3. Для Самовывоза (delivery=2):**\r\n* Данный11111 тип не требует передачи адреса или ПВЗ. \r\n* Рекомендуется передать `recipient_name` и `recipient_phones` для идентификации клиента при выдаче.\r\n"
      operationId: ab9e01c8e03e4f941707275c11c953f7
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              required:
                - delivery
                - items
              properties:
                delivery:
                  type: integer
                  enum: [1, 2, 4]
                fbo:
                  description: 'Тип списания со склада по умолчанию FBO'
                  type: integer
                  default: 1
                  enum: [0, 1]
                items:
                  description: 'JSON-строка с массивом товаров'
                  type: string
                additinfo:
                  description: 'JSON-строка с доп. информацией'
                  type: string
                customfields:
                  description: 'JSON-строка с дополнительными полями фулфилмента {системное_имя: значение}'
                  type: string
                'file[]':
                  description: 'Массив файлов (этикетки)'
                  type: array
                  items: { type: string, format: binary }
              type: object
          application/json:
            schema:
              required:
                - delivery
                - items
              properties:
                delivery:
                  description: '1 - CDEK, 4 - Yandex'
                  type: integer
                  enum: [1, 2, 4]
                fbo:
                  description: 'Тип списания со склада. По умолчанию FBO'
                  type: integer
                  default: 1
                  enum: [0, 1]
                additinfo:
                  properties: { tariff_code: { properties: { value: { type: string, example: '136' } }, type: object }, city: { properties: { value: { type: string, example: '448' } }, type: object }, region: { properties: { value: { type: string, example: '213' }, textvalue: { type: string, example: Москва } }, type: object }, delivery_point: { properties: { value: { type: string, example: MSK1 } }, type: object }, to_location_address: { properties: { value: { type: string, example: 'ул. Мира, 10' } }, type: object }, recipient_name: { properties: { value: { type: string, example: 'Иван Иванов' } }, type: object }, recipient_phones: { properties: { value: { type: string, example: '+79001112233' } }, type: object }, pickup_type: { properties: { value: { type: string, example: custom_location } }, type: object }, to_location_street: { properties: { value: { type: string, example: Ленина } }, type: object }, to_location_streetnumber: { properties: { value: { type: string, example: '10' } }, type: object } }
                  type: object
                items:
                  type: array
                  items: { properties: { barcode: { type: string }, count: { type: integer } }, type: object }
                customfields:
                  description: 'Дополнительные поля, настроенные фулфилментом: объект {системное_имя: значение}; неизвестные ключи игнорируются'
                  type: object
                  example: { ext_id: A-123 }
              type: object
            examples:
              example_cdek_minimal:
                summary: 'CDEK: Самовывоз (ПВЗ)'
                value:
                  delivery: 1
                  fbo: 1
                  items: [{ barcode: SKU123, count: 1 }]
                  additinfo: { tariff_code: { value: '136' }, delivery_point: { value: MSK1 }, recipient_name: { value: 'Иван Иванов' }, recipient_phones: { value: '79001112233' } }
              example_cdek_city_name:
                summary: 'CDEK: доставка курьером'
                value:
                  delivery: 1
                  fbo: 1
                  items: [{ barcode: SKU123, count: 1 }]
                  additinfo: { tariff_code: { value: '137' }, city: { value: Челябинск }, to_location_address: { value: 'ул. Труда, 5' }, recipient_name: { value: 'Иван Иванов' }, recipient_phones: { value: '79001112233' } }
              example_yandex_pvz:
                summary: 'YandexGoGlobal: Самовывоз (ПВЗ)'
                value:
                  delivery: 4
                  fbo: 1
                  comment: 'Заказ до ПВЗ'
                  additinfo: { pickup_type: { value: platform_station }, region: { value: 213, textvalue: Москва }, delivery_point: { value: 0198ac6a1ef123562b2eb6a2971da98af }, recipient_name: { value: Александр }, recipient_lname: { value: Александров }, recipient_phones: { value: '79999999999' }, recipient_email: { value: test@gmail.com } }
                  items: [{ barcode: '4631157577464', count: 1 }]
              example_yandex:
                summary: 'YandexGoGlobal: доставка курьером'
                value:
                  delivery: 4
                  fbo: 1
                  items: [{ barcode: SKU123, count: 1 }]
                  additinfo: { pickup_type: { value: custom_location }, region: { value: '213', textvalue: Москва }, to_location_street: { value: Ленина }, to_location_streetnumber: { value: '10' }, recipient_name: { value: Александр }, recipient_lname: { value: Александров }, recipient_phones: { value: '79999999999' }, recipient_email: { value: test@gmail.com } }
              example_pickup:
                summary: 'Самовывоз: минимальный набор данных'
                value:
                  delivery: 2
                  fbo: 1
                  comment: 'Клиент заберет сам в пятницу'
                  items: [{ barcode: '4631157577464', count: 2 }]
      responses:
        '200':
          description: 'Результат обработки запроса'
          content:
            application/json:
              schema:
                oneOf:
                  - { title: 'Успешный ответ', properties: { status: { type: string, example: OK }, id: { type: integer, example: 12345 }, delivery_info: { properties: { tariff_code: { properties: { value: { type: string } }, type: object }, city: { properties: { value: { type: string } }, type: object }, delivery_point: { properties: { value: { type: string } }, type: object } }, type: object } }, type: object }
                  - { title: Ошибка, properties: { status: { type: string, example: ERROR }, message: { type: string, example: 'Error message' } }, type: object }
              examples:
                success_response:
                  summary: 'Успешная регистрация'
                  value: { status: OK, id: 12345, delivery_info: { tariff_code: { value: '136' }, city: { value: '448' }, region: { value: '74' }, delivery_point: { value: MSK1 }, recipient_name: { value: 'Иван Иванов' }, recipient_phones: { value: '79001112233' } } }
                error_cdek_tariff:
                  summary: 'Ошибка СДЭК: ПВЗ'
                  value: { status: ERROR, message: "Tariff 136 requires 'delivery_point'" }
                error_yandex_geo:
                  summary: 'Ошибка Яндекс: GeoID'
                  value: { status: ERROR, message: "City mismatch: 'Москва' has ID 213, but you provided 1." }
  '/api/{token}/dispatchorders/send/':
    post:
      tags:
        - DispatchOrders
      summary: 'Отправка заявки на сборку'
      description: 'Метод подтверждает заявку и переводит её в статус сборки. При вызове создается запись об отгрузке (Shipment) и проверяется заполнение обязательных интеграционных полей.'
      operationId: dc10db7a7498fe13b4d4e6a94b42fb90
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
      requestBody:
        description: 'Идентификатор заявки для отправки'
        required: true
        content:
          application/json:
            schema:
              required:
                - id
              properties:
                id:
                  description: 'ID заявки на отгрузку'
                  type: integer
                  example: 12345
              type: object
      responses:
        '200':
          description: 'Успешная отправка на сборку'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  message: { type: string, example: 'Order successfully sent for processing' }
                  order_id: { type: integer, example: 12345 }
                  shipment_id: { description: 'ID созданной отгрузки', type: integer, example: 6789 }
                type: object
        '400':
          description: 'Ошибка валидации или прав доступа'
          content:
            application/json:
              schema:
                oneOf:
                  - { title: 'Ошибка параметров', properties: { status: { type: string, example: ERROR }, message: { type: string, example: 'orderId is required! / Permissions denied!' } }, type: object }
                  - { title: 'Ошибка интеграции', properties: { status: { type: string, example: ERROR }, message: { type: string, example: 'Поле `Код ПВЗ` обязательно для заполнения!' } }, type: object }
  '/api/{token}/dispatchorders/delete/':
    post:
      tags:
        - DispatchOrders
      summary: 'Удаление заявки на отгрузку'
      description: 'Полностью удаляет заявку из системы. При удалении все товары, зарезервированные в заказе, автоматически возвращаются на остатки склада (инвентаризируются обратно).'
      operationId: ea7a5c958a52b5281938878a44628433
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
      requestBody:
        description: 'ID заявки для удаления'
        required: true
        content:
          application/json:
            schema:
              required:
                - id
              properties:
                id:
                  description: 'Уникальный идентификатор заявки (orderId)'
                  type: integer
                  example: 12345
              type: object
      responses:
        '200':
          description: 'Успешное удаление'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  message: { type: string, example: 'Order with ID 12345 has been deleted' }
                type: object
        '400':
          description: 'Ошибка при удалении (не найден или нет прав)'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: ERROR }
                  message: { type: string, example: 'Permission denied!', enum: ['orderId is required!', 'Order with ID 12345 not found!', 'Permission denied!'] }
                type: object
  '/api/{token}/dispatchorders/get':
    get:
      tags:
        - DispatchOrders
      summary: 'Получение заявки на отгрузку'
      description: 'Возвращает заявку с детализацией по товарам, внешним ID и кодам маркировки (CIS).'
      operationId: e7220524d3fb0cd3360124723f8b2cb0
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: id
          in: query
          description: 'Id заявки. '
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Успешный ответ'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  data: { type: array, items: { properties: { orderid: { type: integer, example: 101 }, externalid: { type: string, example: '12345678' }, shipmentid: { type: integer, example: 550 }, status: { type: string, example: waitingdelivery, enum: [new, combinig, waitingdelivery, ondelivery, waitclientapproval, delivered, combined, waitforcombine, annuled, unknown] }, customfields: { description: 'Дополнительные поля, настроенные фулфилментом {системное_имя: значение}', type: object, example: { ext_id: A-123 } }, items: { type: array, items: { properties: { article: { type: string, example: SKU-99 }, count: { type: integer, example: 2 }, cis: { type: array, items: { type: string, example: 01046...\u001d21... } } }, type: object } } }, type: object } }
                type: object
  '/api/{token}/dispatchorders/list/':
    get:
      tags:
        - DispatchOrders
      summary: 'Получение списка заявок на отгрузку (Dispatch)'
      description: 'Возвращает список заявок из системы отгрузок. Поддерживает фильтрацию по внутренним ID (ids), английским статусам заявки и диапазону дат. Данные сгруппированы по ID заявки.'
      operationId: d8fa47c6de719a34b5d11834301d1345
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: ids
          in: query
          description: 'JSON-массив внутренних ID заявок (например: [101, 102])'
          required: false
          schema:
            type: string
            example: '[101]'
        -
          name: status
          in: query
          description: 'JSON-массив английских статусов ЗАЯВКИ: new, combinig, waitingdelivery, ondelivery, waitclientapproval, delivered, combined, waitforcombine, annuled'
          required: false
          schema:
            type: string
            example: '["waitingdelivery"]'
        -
          name: date
          in: query
          description: 'JSON-массив даты [дата от, дата до] (YYYY-MM-DD)'
          required: false
          schema:
            type: string
            example: '["2026-01-01", "2026-12-31"]'
        -
          name: page
          in: query
          description: 'Номер страницы (по умолчанию 1)'
          required: false
          schema:
            type: integer
            default: 1
        -
          name: limit
          in: query
          description: 'Лимит записей (1-30, по умолчанию 30)'
          required: false
          schema:
            type: integer
            default: 30
            maximum: 30
      responses:
        '200':
          description: 'Список заявок, сгруппированный по ID заявки'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  data: { description: 'Ключи объекта — это ID заявок (orderid)', type: object, additionalProperties: { properties: { orderid: { type: integer, example: 101 }, date_time: { description: 'Дата создания заявки в системе', type: string, example: '2026-04-08 15:34:57' }, externalid: { description: 'ID в курьерской службе (Яндекс/СДЭК)', type: string, nullable: true }, shipmentid: { description: 'Id связанной отгрузки', type: string }, status: { description: 'Английский статус самой заявки', type: string, example: waitingdelivery }, last_status_date_time: { description: 'Время смены статуса', type: string, example: '2026-04-08 15:34:57' }, addit_info: { description: 'Дополнительная информация по отгрузке', type: object, nullable: true }, customfields: { description: 'Дополнительные поля, настроенные фулфилментом {системное_имя: значение}', type: object, example: { ext_id: A-123 } }, warehouse: { description: 'Склад отгрузки', type: string }, shipment_create_date: { description: 'Дата создания отгрузки FBO', type: string, example: '2026-04-08 15:34:57', nullable: true }, shipment_status: { description: 'Статус связанной отгрузки: Новая, На сборке, Ожидает отгрузки, Отгружена, На проверке клиентом, Вручена получателю, Собрана, Аннулирована, Принята в СЦ/Складе, Принята в СЦ c разногласиями, Отказ приемки в СЦ, Ожидает приемку товара, Ожидает поставку товара, Черновик', type: string, example: 'Ожидает отгрузки', nullable: true }, shipment_laststatus_datetime: { description: 'Время последнего изменения статуса FBO', type: string, example: '2026-04-08 15:34:57', nullable: true }, shipment_shipped_datetime: { description: 'Дата фактической передачи FBO', type: string, example: '2026-04-08 15:34:57', nullable: true }, user: { properties: { first_name: { type: string, example: Иван }, last_name: { type: string, example: Петров } }, type: object }, items: { type: array, items: { properties: { id: { description: 'ID товара', type: integer }, article: { type: string, example: MS-00123 }, name: { type: string, example: 'Наименование товара' }, barcode: { type: string, example: '4601234567890' }, count: { type: integer, example: 1 }, cis: { description: 'Массив КИЗов', type: array, items: { type: string } }, tz: { description: 'Техническое задание', type: array, items: { type: string } } }, type: object } } }, type: object } }
                type: object
  '/api/{token}/incomes/list/':
    get:
      tags:
        - Incomes
      summary: 'Список приёмок с фильтрацией'
      description: 'Возвращает список документов клиента: шапка (id, дата, статус), позиции и дополнительные поля (customfields). Фильтры ids/status/date, пагинация page/limit (до 30).'
      operationId: 531cf798c00e3cd52970d98310b4cab9
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: ids
          in: query
          description: 'ID документа или JSON-массив ID (например: 123 или [123, 124])'
          required: false
          schema:
            type: string
        -
          name: status
          in: query
          description: 'Числовой статус или JSON-массив статусов (например: 0 или [0, 1])'
          required: false
          schema:
            type: string
        -
          name: date
          in: query
          description: 'Диапазон дат создания JSON-массивом: ["2026-01-01","2026-01-31"]'
          required: false
          schema:
            type: string
        -
          name: page
          in: query
          description: 'Страница (по умолчанию 1)'
          required: false
          schema:
            type: integer
            default: 1
        -
          name: limit
          in: query
          description: 'Записей на страницу (по умолчанию и максимум 30)'
          required: false
          schema:
            type: integer
            default: 30
            maximum: 30
      responses:
        '200':
          description: 'Список документов'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  data: { type: array, items: { properties: { id: { type: integer, example: 101 }, date_time: { type: string, example: '2026-07-01 12:00:00' }, status: { type: integer, example: 0 }, status_text: { type: string, example: Новая }, comment: { type: string, example: '', nullable: true }, customfields: { description: 'Дополнительные поля, настроенные фулфилментом', type: object, example: {} }, items: { type: array, items: { properties: { item_id: { type: integer, example: 55 }, article: { type: string, example: SKU-1 }, barcode: { type: string, example: '4600000000000' }, name: { type: string, example: Товар }, count: { type: integer, example: 2 } }, type: object } } }, type: object } }
                type: object
  '/api/{token}/incomes/get/':
    get:
      tags:
        - Incomes
      summary: 'Получение приёмки по ID'
      description: 'Возвращает документ(ы) по ID. Структура ответа как у списка (list), без пагинации.'
      operationId: 5fee1e47160f400b6d9dd1a194edc74e
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: id
          in: query
          description: 'ID документа или JSON-массив ID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Документ (структура как у list)'
  '/api/{token}/inventory/list/':
    get:
      tags:
        - Inventory
      summary: 'Список инвентаризаций с фильтрацией'
      description: 'Возвращает список документов клиента: шапка (id, дата, статус), позиции и дополнительные поля (customfields). Фильтры ids/status/date, пагинация page/limit (до 30).'
      operationId: 88138eb005daf85e4f2c9827755fc99b
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: ids
          in: query
          description: 'ID документа или JSON-массив ID (например: 123 или [123, 124])'
          required: false
          schema:
            type: string
        -
          name: status
          in: query
          description: 'Числовой статус или JSON-массив статусов (например: 0 или [0, 1])'
          required: false
          schema:
            type: string
        -
          name: date
          in: query
          description: 'Диапазон дат создания JSON-массивом: ["2026-01-01","2026-01-31"]'
          required: false
          schema:
            type: string
        -
          name: page
          in: query
          description: 'Страница (по умолчанию 1)'
          required: false
          schema:
            type: integer
            default: 1
        -
          name: limit
          in: query
          description: 'Записей на страницу (по умолчанию и максимум 30)'
          required: false
          schema:
            type: integer
            default: 30
            maximum: 30
      responses:
        '200':
          description: 'Список документов'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  data: { type: array, items: { properties: { id: { type: integer, example: 101 }, date_time: { type: string, example: '2026-07-01 12:00:00' }, status: { type: integer, example: 0 }, status_text: { type: string, example: Новая }, comment: { type: string, example: '', nullable: true }, customfields: { description: 'Дополнительные поля, настроенные фулфилментом', type: object, example: {} }, items: { type: array, items: { properties: { item_id: { type: integer, example: 55 }, article: { type: string, example: SKU-1 }, barcode: { type: string, example: '4600000000000' }, name: { type: string, example: Товар }, count: { type: integer, example: 2 } }, type: object } } }, type: object } }
                type: object
  '/api/{token}/inventory/get/':
    get:
      tags:
        - Inventory
      summary: 'Получение инвентаризации по ID'
      description: 'Возвращает документ(ы) по ID. Структура ответа как у списка (list), без пагинации.'
      operationId: 4d14b9fbcc8d81753bb51ac12e518881
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: id
          in: query
          description: 'ID документа или JSON-массив ID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Документ (структура как у list)'
  '/api/{token}/items/get/':
    get:
      tags:
        - Items
      summary: 'Получение списка товаров с фильтрацией'
      description: 'Возвращает список товаров. Поддерживает поиск по части артикула (LIKE), точный поиск (артикул, ID, штрихкод) и пагинацию. Параметры id, article, article_prec и barcode принимают как одиночные значения, так и JSON-массивы. Работает через (GET/POST).'
      operationId: e51155fa0f4e61f5e4fa8c5e0c715c7a
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: id
          in: query
          description: 'ID товара или JSON-массив ID (например: 123 или [123, 124])'
          required: false
          schema:
            type: string
        -
          name: article
          in: query
          description: 'Частичное совпадение артикула (LIKE).'
          required: false
          schema:
            type: string
        -
          name: article_prec
          in: query
          description: 'Точное совпадение артикула или JSON-массив артикулов (например: ["SKU1", "SKU2"])'
          required: false
          schema:
            type: string
        -
          name: barcode
          in: query
          description: 'Штрихкод или JSON-массив штрихкодов (например: ["46000", "46001"])'
          required: false
          schema:
            type: string
        -
          name: page
          in: query
          description: 'Номер страницы (по умолчанию 1)'
          required: false
          schema:
            type: integer
            default: 1
        -
          name: limit
          in: query
          description: 'Количество элементов на странице (макс. 30)'
          required: false
          schema:
            type: integer
            default: 30
            maximum: 30
      responses:
        '200':
          description: 'Список товаров'
          content:
            application/json:
              schema:
                type: array
                items:
                  properties: { Id: { type: integer, example: 1 }, Name: { type: string, example: 'Товар №1' }, Count: { description: 'Общий остаток', type: integer, example: 10 }, CountVirtual: { description: 'Виртуальный остаток', type: integer, example: 5 }, Article: { type: string, example: SKU-123 }, Barcodes: { type: array, items: { type: string }, example: ['4600000000000'] }, Complect: { description: 'Флаг комплекта или составной части', type: integer, example: 0 }, customfields: { description: 'Дополнительные поля, настроенные фулфилментом {системное_имя: значение}', type: object, example: { ext_article: EXT-001 } } }
                  type: object
  '/api/{token}/orders/get':
    get:
      tags:
        - Orders
      summary: 'Получение информации о заказе'
      description: 'Возвращает детали заказа по его OrderId с проверкой прав доступа юридического лица'
      operationId: ed8097e2e691858fe367d6d696975904
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
            example: w06rnur337n57ji
        -
          name: orderId
          in: query
          description: 'Идентификатор заказа'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Успешный ответ'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  data: { type: array, items: { properties: { orderid: { type: string, example: '12345' }, items: { type: array, items: { properties: { article: { type: string, example: A100 }, count: { type: integer, example: 2 }, cis: { type: string, example: 01046...\u001d21... } }, type: object } }, status: { type: string, example: processing, enum: [new, processing, ondelivery, ondeliverybylogistic, return, canceled, delivered, refused] } }, type: object } }
                type: object
        '400':
          description: 'Ошибка валидации'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: ERROR }
                  message: { type: string, example: 'orderId is required!' }
                type: object
  '/api/{token}/orders/list/':
    get:
      tags:
        - Orders
      summary: 'Получение списка заказов с фильтрацией'
      description: 'Возвращает список заказов, сгруппированных по ID заказа. Поддерживает фильтры по ID заказов (orders_id), статусам и диапазону дат через JSON-массивы. Параметры могут передаваться как в GET, так и в POST.'
      operationId: 484a72872282a344846d8b9ba68b45f7
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: orders_id
          in: query
          description: 'JSON-массив строковых или числовых ID заказов (например: ["ЗАКАЗ-1", "ЗАКАЗ-2"]). Если передан, пагинация игнорируется.'
          required: false
          schema:
            type: string
            example: '["12345"]'
        -
          name: status
          in: query
          description: 'JSON-массив статусов: new, processing, ondelivery, ondeliverybylogistic, return, canceled, delivered, refused'
          required: false
          schema:
            type: string
            example: '["processing", "delivered"]'
        -
          name: date
          in: query
          description: 'JSON-массив [начало, конец] в формате YYYY-MM-DD'
          required: false
          schema:
            type: string
            example: '["2026-01-01", "2026-12-31"]'
        -
          name: page
          in: query
          description: 'Номер страницы (работает только без фильтра orders_id)'
          required: false
          schema:
            type: integer
            default: 1
        -
          name: limit
          in: query
          description: 'Количество заказов на страницу (1-30)'
          required: false
          schema:
            type: integer
            default: 30
            maximum: 30
      responses:
        '200':
          description: 'Успешный ответ со списком заказов'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  data: { description: 'Ключи объекта — это внешние/внутренние ID заказов (orderid)', type: object, additionalProperties: { properties: { orderid: { description: 'ID заказа', type: string, example: '12345' }, datetime: { description: 'Дата создания заказа в системе', type: string, example: '2026-04-08 15:34:57' }, datetime_shipped: { description: 'Дата отгрузки заказа', type: string, example: '2026-04-09 11:20:00', nullable: true }, status: { description: 'Текущий статус заказа', type: string, example: processing }, last_status_date_time: { description: 'Дата последней смены статуса', type: string, example: '2026-04-08 16:00:15' }, items: { type: array, items: { properties: { id: { description: 'ID товарной позиции', type: integer }, article: { description: 'Артикул товара', type: string, example: ART-772 }, name: { description: 'Наименование товара', type: string, example: 'Футболка белая XL' }, barcode: { description: 'Штрихкод товара', type: string, example: '4601234567890' }, count: { description: 'Количество единиц', type: integer, example: 1 }, cis: { description: 'Строка КИЗ (маркировка Честного Знака, символ GS заменен на \u001d)', type: string, example: 01046...\u001d21..., nullable: true } }, type: object } } }, type: object } }
                type: object
  '/api/{token}/returnorders/list/':
    get:
      tags:
        - ReturnOrders
      summary: 'Список заявок на возврат с фильтрацией'
      description: 'Возвращает список документов клиента: шапка (id, дата, статус), позиции и дополнительные поля (customfields). Фильтры ids/status/date, пагинация page/limit (до 30).'
      operationId: b9963ffcc0acd9d02bf9cbfafad5f574
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: ids
          in: query
          description: 'ID документа или JSON-массив ID (например: 123 или [123, 124])'
          required: false
          schema:
            type: string
        -
          name: status
          in: query
          description: 'Числовой статус или JSON-массив статусов (например: 0 или [0, 1])'
          required: false
          schema:
            type: string
        -
          name: date
          in: query
          description: 'Диапазон дат создания JSON-массивом: ["2026-01-01","2026-01-31"]'
          required: false
          schema:
            type: string
        -
          name: page
          in: query
          description: 'Страница (по умолчанию 1)'
          required: false
          schema:
            type: integer
            default: 1
        -
          name: limit
          in: query
          description: 'Записей на страницу (по умолчанию и максимум 30)'
          required: false
          schema:
            type: integer
            default: 30
            maximum: 30
      responses:
        '200':
          description: 'Список документов'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  data: { type: array, items: { properties: { id: { type: integer, example: 101 }, date_time: { type: string, example: '2026-07-01 12:00:00' }, status: { type: integer, example: 0 }, status_text: { type: string, example: Новая }, comment: { type: string, example: '', nullable: true }, customfields: { description: 'Дополнительные поля, настроенные фулфилментом', type: object, example: {} }, items: { type: array, items: { properties: { item_id: { type: integer, example: 55 }, article: { type: string, example: SKU-1 }, barcode: { type: string, example: '4600000000000' }, name: { type: string, example: Товар }, count: { type: integer, example: 2 } }, type: object } } }, type: object } }
                type: object
  '/api/{token}/returnorders/get/':
    get:
      tags:
        - ReturnOrders
      summary: 'Получение заявки на возврат по ID'
      description: 'Возвращает документ(ы) по ID. Структура ответа как у списка (list), без пагинации.'
      operationId: 2305c8d1cdc05d51bafa475b1c87b11c
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: id
          in: query
          description: 'ID документа или JSON-массив ID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Документ (структура как у list)'
  '/api/{token}/returnprocess/list/':
    get:
      tags:
        - ReturnProcess
      summary: 'Список обработок возвратов с фильтрацией'
      description: 'Возвращает список документов клиента: шапка (id, дата, статус), позиции и дополнительные поля (customfields). Фильтры ids/status/date, пагинация page/limit (до 30).'
      operationId: 1569b6ccdabc47f5907b8e960391af91
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: ids
          in: query
          description: 'ID документа или JSON-массив ID (например: 123 или [123, 124])'
          required: false
          schema:
            type: string
        -
          name: status
          in: query
          description: 'Числовой статус или JSON-массив статусов (например: 0 или [0, 1])'
          required: false
          schema:
            type: string
        -
          name: date
          in: query
          description: 'Диапазон дат создания JSON-массивом: ["2026-01-01","2026-01-31"]'
          required: false
          schema:
            type: string
        -
          name: page
          in: query
          description: 'Страница (по умолчанию 1)'
          required: false
          schema:
            type: integer
            default: 1
        -
          name: limit
          in: query
          description: 'Записей на страницу (по умолчанию и максимум 30)'
          required: false
          schema:
            type: integer
            default: 30
            maximum: 30
      responses:
        '200':
          description: 'Список документов'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  data: { type: array, items: { properties: { id: { type: integer, example: 101 }, date_time: { type: string, example: '2026-07-01 12:00:00' }, status: { type: integer, example: 0 }, status_text: { type: string, example: Новая }, comment: { type: string, example: '', nullable: true }, customfields: { description: 'Дополнительные поля, настроенные фулфилментом', type: object, example: {} }, items: { type: array, items: { properties: { item_id: { type: integer, example: 55 }, article: { type: string, example: SKU-1 }, barcode: { type: string, example: '4600000000000' }, name: { type: string, example: Товар }, count: { type: integer, example: 2 } }, type: object } } }, type: object } }
                type: object
  '/api/{token}/returnprocess/get/':
    get:
      tags:
        - ReturnProcess
      summary: 'Получение обработки возвратов по ID'
      description: 'Возвращает документ(ы) по ID. Структура ответа как у списка (list), без пагинации.'
      operationId: cabbbf3f0f5e2f0d0ca82f03752727ea
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: id
          in: query
          description: 'ID документа или JSON-массив ID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Документ (структура как у list)'
  '/api/{token}/shipmentsfbo/list/':
    get:
      tags:
        - ShipmentsFBO
      summary: 'Получение списка отгрузок FBO'
      description: 'Возвращает список отгрузок. Поддерживает фильтрацию по статусам и диапазону дат. При указании флага with_packages=1 выгружаются короба. При указании with_packages=1 и with_items=1 внутри коробов выгружается их наполнение.'
      operationId: ed9efc90c58acdcf4d4379a2e89f9d62
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: status
          in: query
          description: 'JSON-массив статусов: ["Новая", "На сборке", "Ожидает отгрузки", "Отгружена", "На проверке клиентом", "Вручена получателю", "Собрана", "Аннулирована", "Принята в СЦ/Складе", "Принята в СЦ c разногласиями", "Отказ приемки в СЦ", "Ожидает приемку товара", "Ожидает поставку товара", "Черновик"]'
          required: false
          schema:
            type: string
            example: '["Новая", "На сборке"]'
        -
          name: date
          in: query
          description: 'JSON-массив даты [дата от, дата до] (YYYY-MM-DD)'
          required: false
          schema:
            type: string
            example: '["2026-01-01", "2026-12-31"]'
        -
          name: with_packages
          in: query
          description: 'Флаг выгрузки коробов (1 - выгружать, 0 - нет)'
          required: false
          schema:
            type: integer
            default: 0
            enum:
              - 0
              - 1
        -
          name: with_items
          in: query
          description: 'Флаг выгрузки наполнения коробов (работает только при сопутствующем параметре with_packages=1)'
          required: false
          schema:
            type: integer
            default: 0
            enum:
              - 0
              - 1
        -
          name: page
          in: query
          description: 'Номер страницы (по умолчанию 1)'
          required: false
          schema:
            type: integer
            default: 1
        -
          name: limit
          in: query
          description: 'Лимит записей (1-30, по умолчанию 30)'
          required: false
          schema:
            type: integer
            default: 30
            maximum: 30
      responses:
        '200':
          description: 'Список отгрузок FBO'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  data: { description: 'Ключи объекта — это ID отгрузок (shipment_fbo_id)', type: object, additionalProperties: { properties: { shipment_fbo_id: { type: integer, example: 101 }, date_time: { description: 'Дата создания в системе', type: string, example: '2026-04-08 15:34:57' }, status: { description: 'Текущий статус отгрузки', type: string, example: 'Ожидает отгрузки' }, laststatus_datetime: { description: 'Время последнего изменения статуса', type: string, example: '2026-04-08 15:34:57' }, close_datetime: { description: 'Дата проведения', type: string, example: '2026-04-08 15:34:57', nullable: true }, shipped_datetime: { description: 'Дата передачи', type: string, example: '2026-04-08 15:34:57', nullable: true }, shipped_target: { description: 'Площадка назначения', type: string, example: 'Маркетплейс Склад', nullable: true }, external_order: { description: 'Внешний Id заказа', type: string, example: ORD-9921, nullable: true }, delivered_date_time: { description: 'Дата вручения', type: string, example: '2026-04-08 15:34:57', nullable: true }, dispatch_date: { description: 'Планируемая дата отгрузки', type: string, example: '2026-04-08 15:34:57', nullable: true }, customfields: { description: 'Дополнительные поля, настроенные фулфилментом {системное_имя: значение}', type: object, example: { ext_id: A-123 } }, user: { properties: { first_name: { type: string, example: Иван }, last_name: { type: string, example: Иванов } }, type: object }, packages: { description: 'Динамический список коробов (появляется при with_packages=1). Ключи — номера коробов.', type: object, nullable: true, additionalProperties: { properties: { number: { description: 'Номер короба', type: integer, example: 10 }, barcode: { description: 'Баркод короба', type: string, example: WB_1234567 }, length: { description: 'Длина в см', type: integer, example: 40 }, width: { description: 'Ширина в см', type: integer, example: 30 }, height: { description: 'Высота в см', type: integer, example: 20 }, weight: { description: 'Вес в кг', type: number, example: 1.5 }, external_package_id: { description: 'Внешний id короба', type: string, nullable: true }, datetime_print_barcode: { description: 'Время печати баркода короба', type: string, example: '2026-04-08 15:34:57', nullable: true }, pallet_number: { description: 'Номер паллета', type: string, nullable: true }, is_pallet: { description: 'Является ли паллетом', type: boolean, example: false }, items: { description: 'Список товаров внутри короба (появляется при with_items=1)', type: array, items: { properties: { name: { type: string, example: 'Товар Кроссовки' }, barcode: { type: string, example: '4601234567' }, count: { type: integer, example: 1 } }, type: object } } }, type: object } } }, type: object } }
                type: object
  '/api/{token}/transfer/list/':
    get:
      tags:
        - Transfer
      summary: 'Список перемещений с фильтрацией'
      description: 'Возвращает список документов клиента: шапка (id, дата, статус), позиции и дополнительные поля (customfields). Фильтры ids/status/date, пагинация page/limit (до 30).'
      operationId: 8049ef7cefd0e3ee96da4abd136ed740
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: ids
          in: query
          description: 'ID документа или JSON-массив ID (например: 123 или [123, 124])'
          required: false
          schema:
            type: string
        -
          name: status
          in: query
          description: 'Числовой статус или JSON-массив статусов (например: 0 или [0, 1])'
          required: false
          schema:
            type: string
        -
          name: date
          in: query
          description: 'Диапазон дат создания JSON-массивом: ["2026-01-01","2026-01-31"]'
          required: false
          schema:
            type: string
        -
          name: page
          in: query
          description: 'Страница (по умолчанию 1)'
          required: false
          schema:
            type: integer
            default: 1
        -
          name: limit
          in: query
          description: 'Записей на страницу (по умолчанию и максимум 30)'
          required: false
          schema:
            type: integer
            default: 30
            maximum: 30
      responses:
        '200':
          description: 'Список документов'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  data: { type: array, items: { properties: { id: { type: integer, example: 101 }, date_time: { type: string, example: '2026-07-01 12:00:00' }, status: { type: integer, example: 0 }, status_text: { type: string, example: Новая }, comment: { type: string, example: '', nullable: true }, customfields: { description: 'Дополнительные поля, настроенные фулфилментом', type: object, example: {} }, items: { type: array, items: { properties: { item_id: { type: integer, example: 55 }, article: { type: string, example: SKU-1 }, barcode: { type: string, example: '4600000000000' }, name: { type: string, example: Товар }, count: { type: integer, example: 2 } }, type: object } } }, type: object } }
                type: object
  '/api/{token}/transfer/get/':
    get:
      tags:
        - Transfer
      summary: 'Получение перемещения по ID'
      description: 'Возвращает документ(ы) по ID. Структура ответа как у списка (list), без пагинации.'
      operationId: b1b5fec848228cc2859fc17f98a1cefe
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: id
          in: query
          description: 'ID документа или JSON-массив ID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Документ (структура как у list)'
  '/api/{token}/transferorders/list/':
    get:
      tags:
        - TransferOrders
      summary: 'Список заявок на перемещение с фильтрацией'
      description: 'Возвращает список документов клиента: шапка (id, дата, статус), позиции и дополнительные поля (customfields). Фильтры ids/status/date, пагинация page/limit (до 30).'
      operationId: 0bd2e859e557607a88731d9574edc747
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: ids
          in: query
          description: 'ID документа или JSON-массив ID (например: 123 или [123, 124])'
          required: false
          schema:
            type: string
        -
          name: status
          in: query
          description: 'Числовой статус или JSON-массив статусов (например: 0 или [0, 1])'
          required: false
          schema:
            type: string
        -
          name: date
          in: query
          description: 'Диапазон дат создания JSON-массивом: ["2026-01-01","2026-01-31"]'
          required: false
          schema:
            type: string
        -
          name: page
          in: query
          description: 'Страница (по умолчанию 1)'
          required: false
          schema:
            type: integer
            default: 1
        -
          name: limit
          in: query
          description: 'Записей на страницу (по умолчанию и максимум 30)'
          required: false
          schema:
            type: integer
            default: 30
            maximum: 30
      responses:
        '200':
          description: 'Список документов'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  data: { type: array, items: { properties: { id: { type: integer, example: 101 }, date_time: { type: string, example: '2026-07-01 12:00:00' }, status: { type: integer, example: 0 }, status_text: { type: string, example: Новая }, comment: { type: string, example: '', nullable: true }, customfields: { description: 'Дополнительные поля, настроенные фулфилментом', type: object, example: {} }, items: { type: array, items: { properties: { item_id: { type: integer, example: 55 }, article: { type: string, example: SKU-1 }, barcode: { type: string, example: '4600000000000' }, name: { type: string, example: Товар }, count: { type: integer, example: 2 } }, type: object } } }, type: object } }
                type: object
  '/api/{token}/transferorders/get/':
    get:
      tags:
        - TransferOrders
      summary: 'Получение заявки на перемещение по ID'
      description: 'Возвращает документ(ы) по ID. Структура ответа как у списка (list), без пагинации.'
      operationId: f84b596eeb863af60831c4eab214a5a6
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: id
          in: query
          description: 'ID документа или JSON-массив ID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Документ (структура как у list)'
  '/api/{token}/transitin/list/':
    get:
      tags:
        - TransitIn
      summary: 'Список транзитных приёмок с фильтрацией'
      description: 'Возвращает список документов клиента: шапка (id, дата, статус), позиции и дополнительные поля (customfields). Фильтры ids/status/date, пагинация page/limit (до 30).'
      operationId: de22ce91afcfef254c4776dbc98702fc
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: ids
          in: query
          description: 'ID документа или JSON-массив ID (например: 123 или [123, 124])'
          required: false
          schema:
            type: string
        -
          name: status
          in: query
          description: 'Числовой статус или JSON-массив статусов (например: 0 или [0, 1])'
          required: false
          schema:
            type: string
        -
          name: date
          in: query
          description: 'Диапазон дат создания JSON-массивом: ["2026-01-01","2026-01-31"]'
          required: false
          schema:
            type: string
        -
          name: page
          in: query
          description: 'Страница (по умолчанию 1)'
          required: false
          schema:
            type: integer
            default: 1
        -
          name: limit
          in: query
          description: 'Записей на страницу (по умолчанию и максимум 30)'
          required: false
          schema:
            type: integer
            default: 30
            maximum: 30
      responses:
        '200':
          description: 'Список документов'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  data: { type: array, items: { properties: { id: { type: integer, example: 101 }, date_time: { type: string, example: '2026-07-01 12:00:00' }, status: { type: integer, example: 0 }, status_text: { type: string, example: Новая }, comment: { type: string, example: '', nullable: true }, customfields: { description: 'Дополнительные поля, настроенные фулфилментом', type: object, example: {} }, items: { type: array, items: { properties: { item_id: { type: integer, example: 55 }, article: { type: string, example: SKU-1 }, barcode: { type: string, example: '4600000000000' }, name: { type: string, example: Товар }, count: { type: integer, example: 2 } }, type: object } } }, type: object } }
                type: object
  '/api/{token}/transitin/get/':
    get:
      tags:
        - TransitIn
      summary: 'Получение транзитной приёмки по ID'
      description: 'Возвращает документ(ы) по ID. Структура ответа как у списка (list), без пагинации.'
      operationId: 39a36b03236b9993538c258f84de3917
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: id
          in: query
          description: 'ID документа или JSON-массив ID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Документ (структура как у list)'
  '/api/{token}/transitinorders/list/':
    get:
      tags:
        - TransitInOrders
      summary: 'Список заявок на транзит (приём) с фильтрацией'
      description: 'Возвращает список документов клиента: шапка (id, дата, статус), позиции и дополнительные поля (customfields). Фильтры ids/status/date, пагинация page/limit (до 30).'
      operationId: fe8317d7a4d3d6630bac4405fbb2b941
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: ids
          in: query
          description: 'ID документа или JSON-массив ID (например: 123 или [123, 124])'
          required: false
          schema:
            type: string
        -
          name: status
          in: query
          description: 'Числовой статус или JSON-массив статусов (например: 0 или [0, 1])'
          required: false
          schema:
            type: string
        -
          name: date
          in: query
          description: 'Диапазон дат создания JSON-массивом: ["2026-01-01","2026-01-31"]'
          required: false
          schema:
            type: string
        -
          name: page
          in: query
          description: 'Страница (по умолчанию 1)'
          required: false
          schema:
            type: integer
            default: 1
        -
          name: limit
          in: query
          description: 'Записей на страницу (по умолчанию и максимум 30)'
          required: false
          schema:
            type: integer
            default: 30
            maximum: 30
      responses:
        '200':
          description: 'Список документов'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  data: { type: array, items: { properties: { id: { type: integer, example: 101 }, date_time: { type: string, example: '2026-07-01 12:00:00' }, status: { type: integer, example: 0 }, status_text: { type: string, example: Новая }, comment: { type: string, example: '', nullable: true }, customfields: { description: 'Дополнительные поля, настроенные фулфилментом', type: object, example: {} }, items: { type: array, items: { properties: { item_id: { type: integer, example: 55 }, article: { type: string, example: SKU-1 }, barcode: { type: string, example: '4600000000000' }, name: { type: string, example: Товар }, count: { type: integer, example: 2 } }, type: object } } }, type: object } }
                type: object
  '/api/{token}/transitinorders/get/':
    get:
      tags:
        - TransitInOrders
      summary: 'Получение заявки на транзит (приём) по ID'
      description: 'Возвращает документ(ы) по ID. Структура ответа как у списка (list), без пагинации.'
      operationId: 222e1f26776d3e998741e2514527b69a
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: id
          in: query
          description: 'ID документа или JSON-массив ID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Документ (структура как у list)'
  '/api/{token}/transitout/list/':
    get:
      tags:
        - TransitOut
      summary: 'Список транзитных отгрузок с фильтрацией'
      description: 'Возвращает список документов клиента: шапка (id, дата, статус), позиции и дополнительные поля (customfields). Фильтры ids/status/date, пагинация page/limit (до 30).'
      operationId: fb57f6fa4685d389144a5c0d72e09fe5
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: ids
          in: query
          description: 'ID документа или JSON-массив ID (например: 123 или [123, 124])'
          required: false
          schema:
            type: string
        -
          name: status
          in: query
          description: 'Числовой статус или JSON-массив статусов (например: 0 или [0, 1])'
          required: false
          schema:
            type: string
        -
          name: date
          in: query
          description: 'Диапазон дат создания JSON-массивом: ["2026-01-01","2026-01-31"]'
          required: false
          schema:
            type: string
        -
          name: page
          in: query
          description: 'Страница (по умолчанию 1)'
          required: false
          schema:
            type: integer
            default: 1
        -
          name: limit
          in: query
          description: 'Записей на страницу (по умолчанию и максимум 30)'
          required: false
          schema:
            type: integer
            default: 30
            maximum: 30
      responses:
        '200':
          description: 'Список документов'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  data: { type: array, items: { properties: { id: { type: integer, example: 101 }, date_time: { type: string, example: '2026-07-01 12:00:00' }, status: { type: integer, example: 0 }, status_text: { type: string, example: Новая }, comment: { type: string, example: '', nullable: true }, customfields: { description: 'Дополнительные поля, настроенные фулфилментом', type: object, example: {} }, items: { type: array, items: { properties: { item_id: { type: integer, example: 55 }, article: { type: string, example: SKU-1 }, barcode: { type: string, example: '4600000000000' }, name: { type: string, example: Товар }, count: { type: integer, example: 2 } }, type: object } } }, type: object } }
                type: object
  '/api/{token}/transitout/get/':
    get:
      tags:
        - TransitOut
      summary: 'Получение транзитной отгрузки по ID'
      description: 'Возвращает документ(ы) по ID. Структура ответа как у списка (list), без пагинации.'
      operationId: 3bfd69f8b7b78e661cad836cde0a8c7e
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: id
          in: query
          description: 'ID документа или JSON-массив ID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Документ (структура как у list)'
  '/api/{token}/transitoutorders/list/':
    get:
      tags:
        - TransitOutOrders
      summary: 'Список заявок на транзит (отгрузку) с фильтрацией'
      description: 'Возвращает список документов клиента: шапка (id, дата, статус), позиции и дополнительные поля (customfields). Фильтры ids/status/date, пагинация page/limit (до 30).'
      operationId: 9cfe6ca0912e4787ee7172ef39f66993
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: ids
          in: query
          description: 'ID документа или JSON-массив ID (например: 123 или [123, 124])'
          required: false
          schema:
            type: string
        -
          name: status
          in: query
          description: 'Числовой статус или JSON-массив статусов (например: 0 или [0, 1])'
          required: false
          schema:
            type: string
        -
          name: date
          in: query
          description: 'Диапазон дат создания JSON-массивом: ["2026-01-01","2026-01-31"]'
          required: false
          schema:
            type: string
        -
          name: page
          in: query
          description: 'Страница (по умолчанию 1)'
          required: false
          schema:
            type: integer
            default: 1
        -
          name: limit
          in: query
          description: 'Записей на страницу (по умолчанию и максимум 30)'
          required: false
          schema:
            type: integer
            default: 30
            maximum: 30
      responses:
        '200':
          description: 'Список документов'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  data: { type: array, items: { properties: { id: { type: integer, example: 101 }, date_time: { type: string, example: '2026-07-01 12:00:00' }, status: { type: integer, example: 0 }, status_text: { type: string, example: Новая }, comment: { type: string, example: '', nullable: true }, customfields: { description: 'Дополнительные поля, настроенные фулфилментом', type: object, example: {} }, items: { type: array, items: { properties: { item_id: { type: integer, example: 55 }, article: { type: string, example: SKU-1 }, barcode: { type: string, example: '4600000000000' }, name: { type: string, example: Товар }, count: { type: integer, example: 2 } }, type: object } } }, type: object } }
                type: object
  '/api/{token}/transitoutorders/get/':
    get:
      tags:
        - TransitOutOrders
      summary: 'Получение заявки на транзит (отгрузку) по ID'
      description: 'Возвращает документ(ы) по ID. Структура ответа как у списка (list), без пагинации.'
      operationId: 981054d3b9b9e7eaacef4361668fc050
      parameters:
        -
          name: token
          in: path
          description: 'Персональный API токен доступа'
          required: true
          schema:
            type: string
        -
          name: id
          in: query
          description: 'ID документа или JSON-массив ID'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Документ (структура как у list)'
  '/api/{token}/unloadingorders/list/':
    get:
      tags:
        - UnloadingOrders
      summary: 'Получение списка заявок на приемку'
      description: 'Возвращает список заявок на приемку. Поддерживает фильтрацию по ID, статусам и диапазону дат. Содержит информацию по заявке на приемку и минимум информации по связанной приемке.'
      operationId: 06ac7aa0a3d8c80fe1076069e43f9d3e
      parameters:
        -
          name: token
          in: path
          description: 'Ваш API токен доступа'
          required: true
          schema:
            type: string
        -
          name: ids
          in: query
          description: 'JSON-массив внутренних ID заявок'
          schema:
            type: string
            example: '[123, 456]'
        -
          name: status
          in: query
          description: 'JSON-массив названий статусов'
          schema:
            type: string
            example: '["Новая", "Ожидает приемки"]'
        -
          name: date
          in: query
          description: 'JSON-массив диапазона дат [от, до]'
          schema:
            type: string
            example: '["2024-01-01", "2024-12-31"]'
        -
          name: page
          in: query
          description: 'Номер страницы (для пагинации)'
          schema:
            type: integer
            default: 1
        -
          name: limit
          in: query
          description: 'Количество записей на страницу (max 30)'
          schema:
            type: integer
            default: 30
      responses:
        '200':
          description: 'Успешный ответ со списком заявок'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  code: { type: integer, example: 200 }
                  data: { description: 'Объект заявок, где ключом является ID заявки', type: object, additionalProperties: { properties: { unloading_order_id: { description: Номер, type: integer }, create_date_time: { description: 'Дата создания', type: string, format: date-time }, delivery_date_time: { description: 'Дата поставки', type: string, format: date-time }, status: { description: Статус, type: string }, acceptance_sent_date: { description: 'Дата отправки на приемку', type: string, format: date-time, nullable: true }, confirm_date_time: { description: 'Дата подтверждения состава', type: string, format: date-time, nullable: true }, check_date: { description: 'Дата проверки', type: string, format: date-time, nullable: true }, additional_info: { description: 'Дополнительная информация', type: object, nullable: true }, customfields: { description: 'Дополнительные поля, настроенные фулфилментом {системное_имя: значение}', type: object, example: { ext_id: A-123 } }, unloading_id: { description: 'ID разгрузки', type: integer, nullable: true }, unloading_status: { description: 'Статус разгрузки', type: string, nullable: true }, unloading_create_date: { description: 'Дата создания разгрузки', type: string, format: date-time, nullable: true }, unloading_time_start: { description: 'Дата начала разгрузки', type: string, format: date-time, nullable: true }, unloading_time_end: { description: 'Дата окончания разгрузки', type: string, format: date-time, nullable: true }, unloading_close_date: { description: 'Дата закрытия', type: string, format: date-time, nullable: true }, items: { description: 'Список товаров в заявке', type: array, items: { properties: { item_id: { description: 'ID товара', type: integer }, name: { description: 'Название товара', type: string }, barcode: { description: Баркод, type: string }, count: { description: Количество, type: integer }, comment: { description: Комментарий, type: string }, tz: { description: 'Техническое задание (детализация позиций, услуг и материалов)', type: array, items: { properties: { item: { properties: { Price: { description: 'Цена товара', type: number, format: float }, Count: { description: Количество, type: integer }, MaterialsCount: { description: 'Количество материалов', type: integer } }, type: object, nullable: true }, service: { properties: { Name: { description: 'Название услуги', type: string }, Price: { description: 'Цена услуги', type: number, format: float } }, type: object, nullable: true }, material: { properties: { Article: { description: 'Артикул материала', type: string }, Name: { description: 'Название материала', type: string }, Barcode: { description: 'Штрихкод материала', type: string } }, type: object, nullable: true } }, type: object } } }, type: object } } }, type: object } }
                type: object
  '/api/{token}/unloadingorders/add/':
    post:
      tags:
        - UnloadingOrders
      summary: 'Создание заявки на приемку'
      description: 'Метод создает новую заявку на поставку. Принимает список товаров, файлы и дополнительные метаданные. Валидирует дату поставки и наличие товаров.'
      operationId: ecd38fc8305db8947b1b388b7a64be3a
      parameters:
        -
          name: token
          in: path
          description: 'Ваш API токен доступа'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              required:
                - delivery_date_time
              properties:
                delivery_date_time:
                  description: 'Дата поставки (YYYY-MM-DD или YYYY-MM-DD HH:MM:SS)'
                  type: string
                  example: '2026-03-27 15:00:00'
                items:
                  description: 'JSON-массив товаров (barcode или article + count)'
                  type: string
                  example: '[{"barcode":"564637383243","count":1}]'
                storage_type:
                  description: 'Тип хранения: FBO (склад маркетплейса) или FBS (склад продавца)'
                  type: string
                  default: FBO
                  enum: [FBO, FBS]
                allow_itemless_acceptance:
                  description: '0: Состав указан, 1: Принимать по факту, 2: Заполню позже'
                  type: integer
                  default: 0
                  enum: [0, 1, 2]
                comment:
                  description: 'Комментарий к заявке'
                  type: string
                  example: 'Заказ через API'
                additinfo:
                  description: 'Дополнительная информация в формате JSON'
                  type: string
                  example: '{"external_id": 12345}'
                customfields:
                  description: 'JSON-строка с дополнительными полями фулфилмента {системное_имя: значение}'
                  type: string
                file:
                  description: 'Прикрепляемые файлы (картинки/документы)'
                  type: array
                  items: { type: string, format: binary }
              type: object
      responses:
        '200':
          description: 'Заявка успешно создана'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  unloading_order_id: { type: integer, example: 3260 }
                  delivery_info: { description: 'Декодированные данные из additinfo', type: object }
                type: object
        '400':
          description: 'Ошибка валидации'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: ERROR }
                  message: { type: string, example: 'Delivery date cannot be in the past' }
                type: object
  '/api/{token}/unloadingorders/delete/':
    post:
      tags:
        - UnloadingOrders
      summary: 'Удаление заявки на приемку'
      description: "Удаляет заявку и все её позиции. \r\n        Удаление возможно только для заявок в статусе 'Новая', при отсутствии привязанных разгрузок и активных резервов \r\n        в заказах на отгрузку (Dispatch Orders)."
      operationId: 66c5946624fcad96b2bcd9ce3a61da80
      parameters:
        -
          name: token
          in: path
          description: 'Ваш API токен доступа'
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              required:
                - id
              properties:
                id:
                  description: 'Внутренний ID заявки (unloading_order_id)'
                  type: integer
                  example: 3260
              type: object
      responses:
        '200':
          description: 'Заявка успешно удалена'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  message: { type: string, example: 'Unloading order with ID 3260 has been deleted' }
                type: object
        '400':
          description: 'Ошибка удаления (статус не позволяет, найдены резервы или разгрузки)'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: ERROR }
                  message: { type: string, example: 'Cannot delete the unloading order: active reserves found in dispatch orders.' }
                type: object
        '403':
          description: 'Ошибка доступа (заявка принадлежит другому юридическому лицу)'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: ERROR }
                  message: { type: string, example: 'Permission denied!' }
                type: object
  '/api/{token}/unloadings/list/':
    get:
      tags:
        - Unloadings
      summary: 'Получение списка разгрузок'
      description: "Возвращает подробный список разгрузок с привязкой к заявкам на приемку и самим приемки. \r\n        Возможны фильтры по диапазону дат, по id, по id заявок и по старусам"
      operationId: c911675f7bdbc7a9d1f8aaa80a7a2b71
      parameters:
        -
          name: token
          in: path
          description: 'Ваш API токен доступа'
          required: true
          schema:
            type: string
        -
          name: ids
          in: query
          description: 'массив ID разгрузок'
          schema:
            type: string
            example: '["105", "106"]'
        -
          name: status
          in: query
          description: 'массив названий статусов (Новая, В работе, Принята и т.д.)'
          schema:
            type: string
            example: '["Принята"]'
        -
          name: unloading_order_ids
          in: query
          description: 'массив ID родительских заявок на поставку'
          schema:
            type: string
            example: '["3260"]'
        -
          name: date
          in: query
          description: 'массив диапазона дат [от, до]'
          schema:
            type: string
            example: '["2024-03-01", "2024-03-31"]'
        -
          name: page
          in: query
          schema:
            type: integer
            default: 1
        -
          name: limit
          in: query
          schema:
            type: integer
            default: 30
      responses:
        '200':
          description: 'Успешный возврат списка разгрузок'
          content:
            application/json:
              schema:
                properties:
                  status: { type: string, example: OK }
                  code: { type: integer, example: 200 }
                  data: { type: object, additionalProperties: { properties: { unloading_id: { type: integer }, date_time: { type: string, format: date-time }, date_time_start: { type: string, format: date-time, nullable: true }, date_time_end: { type: string, format: date-time, nullable: true }, status: { type: string }, unloading_order_id: { type: integer, nullable: true }, externalid: { type: string, nullable: true }, shipmentid: { type: integer, nullable: true }, customfields: { description: 'Дополнительные поля, настроенные фулфилментом {системное_имя: значение}', type: object }, user: { properties: { first_name: { type: string }, last_name: { type: string } }, type: object }, incomes: { type: array, items: { properties: { id: { type: integer }, date_time: { description: 'Дата создания приемки', type: string }, close_date_time: { description: 'Дата проведения приемки', type: string } }, type: object } } }, type: object } }
                type: object
tags:
  -
    name: ComplectationOrders
    description: ComplectationOrders
  -
    name: Complectations
    description: Complectations
  -
    name: DispatchOrders
    description: DispatchOrders
  -
    name: Incomes
    description: Incomes
  -
    name: Inventory
    description: Inventory
  -
    name: Items
    description: Items
  -
    name: Orders
    description: Orders
  -
    name: ReturnOrders
    description: ReturnOrders
  -
    name: ReturnProcess
    description: ReturnProcess
  -
    name: ShipmentsFBO
    description: ShipmentsFBO
  -
    name: Transfer
    description: Transfer
  -
    name: TransferOrders
    description: TransferOrders
  -
    name: TransitIn
    description: TransitIn
  -
    name: TransitInOrders
    description: TransitInOrders
  -
    name: TransitOut
    description: TransitOut
  -
    name: TransitOutOrders
    description: TransitOutOrders
  -
    name: UnloadingOrders
    description: UnloadingOrders
  -
    name: Unloadings
    description: Unloadings
