openapi: 3.1.0
info:
  version: ''
  title: Apicore Distributor API
  description: |
    >__Начало работы__
      * Для запросов в API используется метод `POST`
      * Для подключения нужен Api-ключ
      (Получить `<Api-ключ>` можно в разделе кабинета "Настройки")
      * Тело запроса raw должно быть в формате `JSON`
      * Ответ отдается также в формате `JSON`

    {% admonition type="info" %}
      **Интерфейс API:** [https://api.apicore.one](https://api.apicore.one)
    {% /admonition %}


    > **Заголовки запроса** ***(Headers)***
    ```
    POST / HTTP 1.1
    Host: https://api.apicore.one
    Api-Key: <Api-ключ>
    Content-Type: application/json
    Accept: application/json
    ```

    {% admonition type="danger" name="Внимание!" %}
      Не передавайте Api-ключ посторонним лицам!
    {% /admonition %}

    {% admonition type="warning" %}
      Если от вас поступает слишком много ошибочных или одинаковых запросов, мы можем ограничить доступ к API
    {% /admonition %}

    {% admonition type="info" %}
      Если вам требуется дополнительная функциональность в API, пишите на <a href="mailto:support@apicore.one" target="_blank">support@apicore.one</a>, с радостью рассмотрим предложения.
    {% /admonition %}

    {% cards %}
      {% card title="Telegram" icon="../images/telegram.svg" to="https://t.me/apicore_distributor" variant="elevated" %}
        Канал по актуальным обновлениям. 
      {% /card %}
    {% /cards %}
  contact:
    name: Связаться с поддержкой
    email: support@apicore.one
  x-logo:
    url: ./logo.svg
    altText: Apicore logo
servers:
  - url: https://api.apicore.one
    description: Основной сервер
security:
  - api_key_auth: []
x-tagGroups:
  - name: Общие методы
    tags:
      - Api-ключ
  - name: Каталоги товаров
    tags:
      - Работа с каталогами товаров
      - Категории каталога
      - Товары каталога
  - name: Типы цен
    tags:
      - Работа с типами цен
  - name: Стек импорта
    tags:
      - Работа со стеком импорта
paths:
  /distributor/v1/key.check:
    post:
      operationId: key-check
      tags:
        - Api-ключ
      summary: Проверка ключа
      description: >
        > Для быстрой тестовой проверки подключения к API можно использовать
        этот метод. Он не требует наличия тела запроса. 

        Нужно только в Header-заголовке “Api-Key” указать Api-ключ. Работает без
        тела запроса.
      parameters:
        - $ref: '#/components/parameters/Content-Type'
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/Api-Key'
      responses:
        '200':
          description: Подключение успешно
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
              example:
                status: true
                message: Подключение успешно
        '400':
          description: Неверный запрос
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      status:
                        type: boolean
                      message:
                        type: string
              examples:
                noApiKey:
                  value:
                    status: false
                    message: Header заголовок Api-Key не найден
                noPost:
                  value:
                    status: false
                    message: Api работает только через POST запрос
        '401':
          description: Неверный API ключ
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
              example:
                status: false
                message: Пользователь не найден
        '404':
          description: Некорректный метод
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
              example:
                status: false
                message: Метод не найден
        '500':
          description: Внутрянняя ошибка сервера
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
              example:
                status: false
                message: Внутренняя ошибка сервера
  /distributor/v1/catalog.add:
    post:
      operationId: catalog-add
      tags:
        - Работа с каталогами товаров
      summary: Метод создания каталогов товаров
      description: |
        > Метод создает новый каталог товаров. Возвращает результат добавления.
      security:
        - api_key_auth: []
      parameters:
        - $ref: '#/components/parameters/Content-Type'
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/Api-Key'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                code:
                  type: string
                  description: >-
                    Код каталога, уникальный для дистрибьютора. Ограничен 40
                    символами. Разрешены только маленькие латинские буквы, тире
                    и цифры.
                  pattern: ^[a-z0-9\-]+$
                name:
                  type: string
                  description: Название каталога
              required:
                - code
                - name
              example:
                - code: fmcg
                  name: Каталог FMCG
      responses:
        '200':
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
                example:
                  - status: true
                    message: >-
                      Код каталога может содержать только маленькие латинские
                      буквы, цифры и тире.
        '406':
          description: Неприемлеые данные
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      status:
                        type: boolean
                      message:
                        type: string
              examples:
                invalidCode:
                  value:
                    status: false
                    message: >-
                      Код каталога может содержать только маленькие латинские
                      буквы, цифры и тире.
                longCode:
                  value:
                    status: false
                    message: Код каталога не может быть длиннее 40 символов
                codeExists:
                  value:
                    status: false
                    message: >-
                      Код каталога fmcg уже существует для текущего
                      дистрибьютора
  /distributor/v1/catalog.list:
    post:
      operationId: catalog-list
      tags:
        - Работа с каталогами товаров
      summary: Метод получения списка каталогов товаров
      description: >
        > Метод возвращает полный список каталогов дистрибьютора.  Работает без
        тела запроса.
      security:
        - api_key_auth: []
      parameters:
        - $ref: '#/components/parameters/Content-Type'
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/Api-Key'
      responses:
        '200':
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CatalogListResponse'
              example:
                status: true
                catalogs:
                  - code: main
                    name: Основной каталог
                  - code: fmcg
                    name: Каталог FMCG
                count: 2
  /distributor/v1/category.import:
    post:
      operationId: category-import
      tags:
        - Категории каталога
      summary: Метод импорта категорий каталога
      description: >
        >  Метод полностью обновляет структуру категорий каталога
        дистрибьютора. 


        Если в запросе отсутствует категория, 
          которая существует в каталоге, то эта категория каталога деактивируется. Возвращает статус добавления данных в очередь на 
          обработку, результат обработки которого можно проверить методом `import.status`. 
      security:
        - api_key_auth: []
      parameters:
        - $ref: '#/components/parameters/Content-Type'
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/Api-Key'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                catalog_code:
                  type: string
                  description: >-
                    Код каталога. Если не задан, категории будут привязаны к
                    первому каталогу по умолчанию.
                categories:
                  description: Массив категорий.
                  type: array
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        description: >-
                          Уникальный идентификатор товара. Ограничен 40
                          символами
                      name:
                        type: string
                        description: Название категории.
                      parent_id:
                        type: string
                        description: >-
                          Идентификатор родительской категории. Ограничен 40
                          символами
                    required:
                      - id
                      - name
              example:
                - catalog_code: main
                  categories:
                    - id: category-1
                      name: Категория 1
                    - id: category-2
                      name: Категория 2
                      parent_id: category-1
      responses:
        '200':
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
                  stack_id:
                    type: number
              example:
                status: true
                message: Создана очередь на обновление категорий
                stack_id: 1
        '406':
          description: Неприемлемые данные
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
              example:
                status: false
                message: categories должен быть массивом
  /distributor/v1/product.import:
    post:
      tags:
        - Товары каталога
      operationId: product-import
      summary: Импорт карточки товаров каталога
      description: >
        > Метод полностью обновляет товары каталога дистрибьютора. Данные по
        товарам ставятся в общую очередь на обновление товаров.

          __Для каждого аккаунта в сутки есть ограничение__ на количество товаров, которые можно добавить в очередь на обработку. Поэтому рекомендуем использовать 
          данный метод только для добавления новых товаров или ежедневного разового обновления всех товаров. Для обновления актуальности 
          цен, остатков и дополнительных сущностей товара __рекомендуем использовать отдельные методы, они имеют приоритет по скорости 
          обработки.__

          Запрос ограничен 100 товарами, если больше, то возвращается ошибка.

          При импорте массива цен “prices” происходит поиск типа цены по id. Если тип цены по id не найден, цена для данного товара не будет создана, в результат обработки вернется текст ошибки.

          Возвращает статус добавления данных в очередь на обработку, результат обработки которого можно проверить методом `import.status`. 
      security:
        - api_key_auth: []
      parameters:
        - $ref: '#/components/parameters/Content-Type'
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/Api-Key'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                catalog_code:
                  type: string
                  description: >-
                    Код каталога. Если не задан, категории будут привязаны к
                    первому каталогу по умолчанию.
                products:
                  description: Массив товаров
                  type: array
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        description: >-
                          Уникальный идентификатор товара. Ограничен 40
                          символами.
                      name:
                        type: string
                        description: Название товара.
                      long_name:
                        type: string
                        description: >-
                          Длинное название товара с перечислением некоторых
                          особенностей товара.
                      price:
                        type: number
                        format: float
                        description: >-
                          Цена товара доступная для всех Дилеров по умолчанию.
                          Разделитель дробной части — точка, до двух знаков
                          после точки.
                      rrp:
                        type: number
                        format: float
                        description: >-
                          Рекомендуемая розничная цена товара. Разделитель
                          дробной части — точка, до двух знаков после точки.
                      currency:
                        type: string
                        description: Валюта цены.
                      prices:
                        description: Массив множественных цен товаров.
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                              description: Уникальный идентификатор типа цены.
                            price:
                              type: number
                              format: float
                              description: >-
                                Цена товара доступная для прикрепленных к этому
                                типу цен Дилеров. Разделитель дробной части —
                                точка, до двух знаков после точки.
                          required:
                            - id
                            - price
                      quantity:
                        type: number
                        description: Общий остаток товара.
                      order:
                        type: boolean
                        description: >-
                          Признак товара "На заказ". Если равен `true`, тогда
                          товар активен (при наличии у товара цены)
                      category_id:
                        type: string
                        description: Идентификатор категории, в которой находится товар.
                      barcode:
                        type: string
                        description: Штрихкод товара.
                      vendor:
                        type: string
                        description: Бренд товара.
                      vendor_code:
                        type: string
                        description: Артикул товара.
                      inner_code:
                        type: string
                        description: >-
                          Любой уникальный код товара во внутренней системе
                          дистрибьютора.
                      quality:
                        type: string
                        description: >-
                          Код качества товаров. Варианты значений можно получить
                          методом
                          [product.quality.list](/api/distributor/tovary-kataloga/product-quality-list).
                          Если не указан, по умолчанию будет установлен `new` -
                          Новый.
                      description:
                        type: string
                        description: Описание товара.
                      images:
                        type: array
                        description: >-
                          Массив ссылок на изображения товара. Ссылки должны
                          быть в открытом доступе и доступны на скачивание по
                          методу `GET`.
                        items:
                          type: string
                      images_base64:
                        type: array
                        description: Массив изображений закодированных в mime base64.
                        items:
                          type: string
                      props:
                        type: array
                        description: Массив свойств товара.
                        items:
                          type: object
                          properties:
                            name:
                              description: Название свойства.
                              type: string
                            value:
                              description: Значение свойства.
                              type: string
                          required:
                            - name
                            - value
                      params:
                        type: object
                        description: 'Объект параметров товара: размер и вес.'
                        properties:
                          width:
                            type: number
                            description: Ширина товара.
                          height:
                            type: number
                            description: Высота товара.
                          length:
                            type: number
                            description: Длина товара.
                          dimensions_unit:
                            type: string
                            description: >-
                              Единица измерения размеров. По умолчанию значение
                              в миллиметрах - “mm”.
                          weight:
                            type: number
                            description: Вес товара.
                          weight_unit:
                            type: string
                            description: >-
                              Единица измерения веса. По умолчанию значение в
                              граммах - “g”.
                    required:
                      - id
                      - name
            example:
              catalog_code: main
              products:
                - id: product-1
                  name: Товар 1
                  long_name: >-
                    Длинное название Товара 1 с перечислением некоторых
                    особенностей
                  price: 1000
                  rrp: 1500
                  currency: KZT
                  prices:
                    - id: price-1
                      price: 1110
                    - id: price-2
                      price: 1010
                    - id: price-3
                      price: 910
                  quantity: 10
                  order: true
                  category_id: category-2
                  barcode: '1234567890123'
                  vendor: Бренд
                  vendor_code: Артикул
                  inner_code: '123456'
                  quality: new
                  description: Описание товара
                  images:
                    - https://domain/img/vp10o8o77grk4b6kox3h20l7g2g04flf.jpg
                    - https://domain/img/tessd0mk0706v8k5khn9fx6157ndv0b0.jpg
                  images_base64:
                    - >-
                      iVBORw0KGgoAAAANSUhEUgAABeMAAANUCAIAAAC/nKEJAAAACXBIWXMAA...
                    - >-
                      iNQAAAAAAAJ6CSA0AAAAAAICnIFIDAAAAAADgKYjUAAAAAAAAeAoiNQAA...
                  props:
                    - name: Название свойства 1
                      value: Значение свойства 1
                    - name: Название свойства 2
                      value: Значение свойства 2
                  params:
                    width: 200
                    height: 300
                    length: 900
                    dimensions_unit: mm
                    weight: 500
                    weight_unit: g
                - id: product-2
                  name: Товар 2
                  long_name: >-
                    Длинное название Товара 2 с перечислением некоторых
                    особенностей
                  price: 2000
                  rrp: 2600
                  currency: KZT
                  quantity: 20
                  category_id: category-2
                  barcode: '1234567890123'
                  vendor: Бренд
                  vendor_code: Артикул
                  inner_code: '098765'
                  quality: new
                  description: Описание товара
                  images:
                    - https://domain/img/xdgvkp4g14x904lvyb67linq3lq6bkq2.png
                    - https://domain/img/33ox4msgbwepcs2r3y3dpur77dhpi76o.jpg
                  images_base64:
                    - >-
                      iVBORw0KGgoAAAANSUhEUgAABeMAAANUCAIAAAC/nKEJAAAACXBIWXMAA...
                    - >-
                      iNQAAAAAAAJ6CSA0AAAAAAICnIFIDAAAAAADgKYjUAAAAAAAAeAoiNQAA...
                  props:
                    - name: Название свойства 1
                      value: Значение свойства 1
                    - name: Название свойства 2
                      value: Значение свойства 2
                  params:
                    width: 100
                    height: 100
                    length: 100
                    dimensions_unit: mm
                    weight: 100
                    weight_unit: g
      responses:
        '200':
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
                  stack_id:
                    type: number
              example:
                status: true
                message: Создана очередь на обновление товаров
                stack_id: 1
        '406':
          description: Неприемлемые данные
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
              example:
                status: false
                message: products должен быть массивом
  /distributor/v1/product.price.import:
    post:
      tags:
        - Товары каталога
      operationId: product-price-import
      summary: Обновление цен товаров
      description: >
        > Метод обновляет цены товаров. Запрос ограничен 1000 товарами, если
        больше то возвращается ошибка.

         При импорте массива цен `prices` происходит поиск типа цены по `id`. Если тип цены по `id` не найден, цена для данного товара не будет создана, 
         в результат обработки вернется текст ошибки.<br> Возвращает статус добавления данных в очередь на обработку, результат обработки которого можно проверить 
         методом `import.status`. 

         {% admonition type="info" %}
           При передаче массива **[prices]** типы цен предварительно должны быть созданы (см. метод _Импорт множественных типов цен_).
         {% /admonition %}
      security:
        - api_key_auth: []
      parameters:
        - $ref: '#/components/parameters/Content-Type'
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/Api-Key'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                products:
                  type: array
                  description: Массив товаров.
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        description: >-
                          Уникальный идентификатор товара. Ограничен 40
                          символами.
                      price:
                        type: number
                        format: float
                        description: Цена товара доступная для всех Дилеров по умолчанию.
                      rrp:
                        type: number
                        format: float
                        description: >-
                          Рекомендуемая розничная цена. Разделитель дробной
                          части — точка, до двух знаков после точки.
                      currency:
                        type: string
                        description: Валюта цены.
                      prices:
                        type: array
                        description: Массив множественных цен товаров.
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                              description: Уникальный идентификатор типа цены.
                            price:
                              type: number
                          required:
                            - id
                            - price
                    required:
                      - id
                      - price
            example:
              products:
                - id: product-1
                  price: 1200
                  rrp: 1590
                  currency: KZT
                  prices:
                    - id: price-1
                      price: 1110
                    - id: price-2
                      price: 1010
                    - id: price-3
                      price: 910
                - id: product-2
                  price: 2000
                  rrp: 2590
                  currency: KZT
                  prices:
                    - id: price-1
                      price: 1900
                    - id: price-2
                      price: 1800
      responses:
        '200':
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
                  stack_id:
                    type: number
              example:
                status: true
                message: Создана очередь на обновление цен
                stack_id: 1
        '406':
          description: Неприемлемые данные
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
              example:
                status: false
                message: products должен быть массивом
  /distributor/v1/product.quantity.import:
    post:
      tags:
        - Товары каталога
      operationId: product-quantity-import
      summary: Обновление остатков товаров
      description: >
        > Метод обновляет остатки товаров.  Запрос ограничен 1000 товарами, если
        больше, то возвращается ошибка.

          Если остаток равен 0 или параметр `order: true`, товар активен (при наличии у товара цены).

          Возвращает статус добавления данных в очередь на обработку, 
          результат обработки которого можно проверить методом `import.status`.
      security:
        - api_key_auth: []
      parameters:
        - $ref: '#/components/parameters/Content-Type'
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/Api-Key'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                products:
                  type: array
                  description: Массив остатков товаров.
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        description: >-
                          Уникальный идентификатор товара. Ограничен 40
                          символами.
                      quantity:
                        type: number
                        description: Общий остаток товара.
                      order:
                        type: boolean
                        description: >-
                          Признак товара "На заказ". Если равен `true`, тогда
                          товар активен (при наличии у товара цены)
                    required:
                      - id
            example:
              products:
                - id: product-1
                  quantity: 0
                  order: true
                - id: product-2
                  quantity: 20
      responses:
        '200':
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
                  stack_id:
                    type: number
              example:
                status: true
                message: Создана очередь на обновления остатков
                stack_id: 1
        '406':
          description: Неприемлемые данные
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
              example:
                status: false
                message: products должен быть массивом
  /distributor/v1/product.description.import:
    post:
      tags:
        - Товары каталога
      operationId: product-description-import
      summary: Обновление описания товаров
      description: |
        > Метод обновляет описания товаров.
          Запрос ограничен 100 товарами, если больше, то возвращается ошибка.

          Возвращает статус добавления данных в очередь на обработку, результат обработки которого можно проверить методом `import.status`.  
      security:
        - api_key_auth: []
      parameters:
        - $ref: '#/components/parameters/Content-Type'
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/Api-Key'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                products:
                  type: array
                  description: Массив остатков товаров.
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        description: >-
                          Уникальный идентификатор товара. Ограничен 40
                          символами.
                      description:
                        type: string
                        description: Текст описания товара.
                    required:
                      - id
                      - description
            example:
              products:
                - id: product-1
                  description: Детальное описание товара 1
                - id: product-2
                  description: Детальное описание товара 2
      responses:
        '200':
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
                  stack_id:
                    type: number
              example:
                status: true
                message: Создана очередь на обновление описаний
                stack_id: 1
        '406':
          description: Неприемлемые данные
          content:
            application/json:
              schema:
                items:
                  type: object
                  properties:
                    status:
                      type: boolean
                    message:
                      type: string
              examples:
                products_not_array:
                  value:
                    status: false
                    message: products должен быть массивом
                products_goods_not_found:
                  value:
                    status: false
                    message: Не найдены товары в массиве products
  /distributor/v1/product.image.import:
    post:
      tags:
        - Товары каталога
      operationId: product-image-import
      summary: Обновление изображений товаров
      description: >
        > Метод обновляет изображения товаров. Запрос ограничен 1000 товарами,
        если больше, то возвращается ошибка.


        Возвращает статус добавления данных в очередь на обработку, результат
        обработки которого 

        можно проверить методом `import.status`. 
      security:
        - api_key_auth: []
      parameters:
        - $ref: '#/components/parameters/Content-Type'
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/Api-Key'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                products:
                  type: array
                  description: Массив остатков товаров.
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        description: >-
                          Уникальный идентификатор товара. Ограничен 40
                          символами.
                      images:
                        type: array
                        description: >-
                          Массив ссылок на изображения товара. Ссылки должны
                          быть в открытом доступе и доступны на скачивание по
                          методу `GET`.
                        items:
                          type: string
                      images_base64:
                        type: array
                        description: Массив изображений закодированных в `mime base64`.
                        items:
                          type: string
                    required:
                      - id
            example:
              products:
                - id: product-1
                  images:
                    - >-
                      https://domain/upload/iblock/ad5/1bbfgmufy6timpyg6uskhoxko0lfpl0g.png
                  images_base64:
                    - >-
                      iVBORw0KGgoAAAANSUhEUgAABeMAAANUCAIAAAC/nKEJAAAACXBIWXMAA...
                    - >-
                      iNQAAAAAAAJ6CSA0AAAAAAICnIFIDAAAAAADgKYjUAAAAAAAAeAoiNQAA...
                - id: product-1
                  images:
                    - >-
                      https://domain/upload/iblock/e9e/bwo370cewu2j8dfomb0nphm6ww9d0ico.png
                    - >-
                      https://domain/upload/iblock/a6c/ac4wrae2dmdr68fxf08wicft8r1cie27.png
                    - >-
                      https://domain/upload/iblock/aa8/y5d595szgwtsamzxfrhp9ou18op7mv53.png
                  images_base64:
                    - >-
                      iVBORw0KGgoAAAANSUhEUgAABeMAAANUCAIAAAC/nKEJAAAACXBIWXMAA...
                    - >-
                      iNQAAAAAAAJ6CSA0AAAAAAICnIFIDAAAAAADgKYjUAAAAAAAAeAoiNQAA...
      responses:
        '200':
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
                  stack_id:
                    type: number
              example:
                status: true
                message: Создана очередь на обновление остатков
                stack_id: 1
        '406':
          description: Неприемлемые данные
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      status:
                        type: boolean
                      message:
                        type: string
              examples:
                products_not_array:
                  value:
                    status: false
                    message: products должен быть массивом
                products_goods_not_found:
                  value:
                    status: false
                    message: Не найдены товары в массиве products
                products_limit_exceeded:
                  value:
                    status: false
                    message: >-
                      Превышено количество товаров в запросе. Допустимое
                      количество - 1000
  /distributor/v1/product.prop.import:
    post:
      tags:
        - Товары каталога
      operationId: product-prop-import
      summary: Обновление свойств товаров
      description: >
        > Метод обновляет свойства товаров. Запрос ограничен 1000 товарами, если
        больше, то возвращается ошибка.

          Возвращает статус добавления данных в очередь на обработку, результат обработки которого можно проверить методом `import.status`.
      security:
        - api_key_auth: []
      parameters:
        - $ref: '#/components/parameters/Content-Type'
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/Api-Key'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                products:
                  type: array
                  description: Массив остатков товаров
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        description: >-
                          Уникальный идентификатор товара. Ограничен 40
                          символами.
                      props:
                        type: array
                        description: Массив свойств товара.
                        items:
                          type: object
                          properties:
                            name:
                              type: string
                              description: Название свойства.
                            value:
                              type: string
                              description: Значение свойства.
                          required:
                            - name
                            - value
                    required:
                      - id
            example:
              products:
                - id: product-1
                  props:
                    - name: Название свойства 1
                      value: Значение свойства 1
                    - name: Название свойства 2
                      value: Значение свойства 2
                - id: product-2
                  props:
                    - name: Производитель
                      value: Samsung
                    - name: Диагональ (см)
                      value: '139'
      responses:
        '200':
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
                  stack_id:
                    type: number
              example:
                status: true
                message: Создана очередь на обновление остатков
                stack_id: 1
        '406':
          description: Неприемлемые данные
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      status:
                        type: boolean
                      message:
                        type: string
              examples:
                products_not_array:
                  value:
                    status: false
                    message: products должен быть массивом
                products_goods_not_found:
                  value:
                    status: false
                    message: Не найдены товары в массиве products
                products_limit_exceeded:
                  value:
                    status: false
                    message: >-
                      Превышено количество товаров в запросе. Допустимое
                      количество - 1000
  /distrubutor/v1/product.param.import:
    post:
      tags:
        - Товары каталога
      operationId: product-param-import
      summary: Обновление параметров товаров
      description: >
        > Метод обновляет параметры товаров. Запрос ограничен 1000 товарами,
        если больше, то возвращается ошибка.


        Возвращает статус добавления данных в очередь на обработку, результат
        обработки которого можно проверить 

        методом `import.status`.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                catalog_code:
                  type: string
                  description: >-
                    Код каталога. Если не задан, параметры будут обновлены в
                    товарах каталоге по умолчанию (обычно это “Основной каталог”
                    с кодом “main”).
                products:
                  type: array
                  description: Массив параметров товаров.
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        description: >-
                          Уникальный идентификатор товара. Ограничен 40
                          символами.
                      params:
                        type: object
                        description: Массив параметров товара.
                        properties:
                          width:
                            type: number
                            description: Ширина товара.
                          height:
                            type: number
                            description: Высота товара.
                          length:
                            type: number
                            description: Длина товара.
                          dimensions_unit:
                            type: string
                            description: >-
                              Единица измерения размеров. По умолчанию значение
                              в миллиметрах - “mm”.
                          weight:
                            type: number
                            description: Вес товара.
                          weight_unit:
                            type: string
                            description: >-
                              Единица измерения веса. По умолчанию значение в
                              граммах - “g”.
            example:
              catalog_code: main
              products:
                - id: product-1
                  params:
                    width: 1200
                    height: 1300
                    length: 1900
                    dimensions_unit: mm
                    weight: 1500
                    weight_unit: g
                - id: product-1
                  params:
                    width: 100
                    height: 100
                    length: 100
                    dimensions_unit: mm
                    weight: 100
                    weight_unit: g
      responses:
        '200':
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
                  stack_id:
                    type: number
              example:
                status: true
                message: Создана очередь на обновление параметров
                stack_id: 1
        '406':
          description: Неприемлемые данные
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      status:
                        type: boolean
                      message:
                        type: string
              examples:
                products_not_array:
                  value:
                    status: false
                    message: products должен быть массивом.
                products_goods_not_found:
                  value:
                    status: false
                    message: Не найдены товары в массиве products.
                products_limit_exceeded:
                  value:
                    status: false
                    message: >-
                      Превышено количество товаров в запросе. Допустимое
                      количество - 1000.
  /distributor/v1/product.list:
    post:
      tags:
        - Товары каталога
      operationId: product-list
      summary: Получение данных по карточке товара
      description: >
        > Метод возвращает список базовых карточек товаров дистрибьютора. Один
        запрос возвращает до 1000 товаров.


        Чтобы получить следующие 1000 товаров добавьте в тело запроса параметр
        смещения `offset` со значением 1000. 

        В ответе возвращается параметр `total`, содержащий общее количество
        товаров. Если `offset`, будет больше чем `total`, 

        то будет возвращаться значение из `offset` с пустым массивом товаров. 


        В ответе возвращается параметр `count`, 

        содержащий количество товаров в ответе. Для определения, нужен ли еще
        один запрос, чтобы получить следующие 1000 

        товаров, в ответе возвращается параметр `next_offset`. 




        Если он есть, можно подставлять значение из этого параметра в `offset`
        следующего запроса. Если `next_offset` 

        отсутствует, значит вы получили весь список товаров.
      security:
        - api_key_auth: []
      parameters:
        - $ref: '#/components/parameters/Content-Type'
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/Api-Key'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                catalog_code:
                  type: string
                  description: >-
                    Код каталога товаров. Если не указать код каталога, то будут
                    возвращены все товары всех ваших каталогов (при условии, что
                    у вас их несколько).
                offset:
                  type: number
                  description: Параметр смещения для получения следующего списка товаров.
      responses:
        '200':
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  products:
                    type: array
                    description: Массив базовых карточек товаров дистрибьютора.
                    items:
                      type: object
                      properties:
                        ext_id:
                          type: string
                          description: >-
                            Уникальный идентификатор товара. При импорте
                            передается в поле id, при ручном добавлении товара
                            отсутствует.
                        active:
                          type: boolean
                          description: >-
                            Параметр активности товара. Рассчитывается
                            автоматически в зависимости от наличия остатков и
                            цен. Активные товары доступны к показу подключенным
                            дилерам, неактивные товары из показа исчезают.
                        name:
                          type: string
                          description: Название товара
                        long_name:
                          type: string
                          description: >-
                            Полное название продукта  с перечислением некоторых
                            особенностей
                        category_id:
                          type: string
                          description: Идентификатор категории, в которой находится товар.
                        barcode:
                          type: string
                          description: Штрихкод товара.
                        vendor:
                          type: string
                          description: Бренд товара.
                        vendor_code:
                          type: string
                          description: Артикул товара.
                        inner_code:
                          type: string
                          description: >-
                            Любой уникальный код товара во внутренней системе
                            дистрибьютора.
                        quality:
                          type: string
                          description: Код качества товара.
                  total:
                    type: number
                    description: Общее количество товаров
                  count:
                    type: number
                    description: Количество товаров в текущем ответе
                  offset:
                    type: number
                    description: Параметр смещения количества товаров.
                  next_offset:
                    type: number
                    description: Параметр определения, нужен ли еще один запрос.
              example:
                status: true
                products:
                  - ext_id: '20'
                    active: true
                    name: Батарейка DURACELL Basic АА 4шт LR6
                    long_name: >-
                      Батарейки Duracell пальчиковые AA LR6/MN1500, 1.5 V, 4 шт.
                      в упаковке
                    category_id: '68'
                    barcode: ''
                    vendor: Бренд
                    vendor_code: '81545403'
                    inner_code: '19817'
                    quality: new
                  - ext_id: '21'
                    active: true
                    name: Жесткий диск HDD  1Tb Seagate BarraCuda SATA6Gb/s
                    long_name: >-
                      Жесткий диск HDD 1Tb Seagate BarraCuda SATA6Gb/s 7200rpm,
                      64Mb, 3.5,  ST1000DM010
                    category_id: '27'
                    barcode: ''
                    vendor: Бренд
                    vendor_code: ST1000DM010
                    inner_code: '17746'
                    quality: new
                total: 1000
                offset: 0
                next_offset: 1000
        '406':
          description: Неприемлемые данные
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
              example:
                status: false
                message: Каталог не найден
  /distributor/v1/product.quality.list:
    post:
      operationId: product-quality-list
      tags:
        - Товары каталога
      summary: Получение списка кодов "Качества товара"
      description: |
        > Метод возвращает список значений и кодов "Качества товара".
      parameters:
        - $ref: '#/components/parameters/Content-Type'
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/Api-Key'
      responses:
        '200':
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  quality:
                    type: array
                    description: Массив кодов и значений "Качества товара"
                    items:
                      type: object
                      properties:
                        code:
                          type: string
                          description: Код качества
                        name:
                          type: string
                          description: Название качества
                  count:
                    type: number
                    description: Количество элементов "Качества"
              example:
                status: true
                quality:
                  - code: new
                    name: Новый
                  - code: dis
                    name: Уцененный
                  - code: rep
                    name: После ремонта
                  - code: pac
                    name: Поврежденная упаковка
                count: 4
  /distributor/v1/catalog.pricetypes.import:
    post:
      tags:
        - Работа с типами цен
      operationId: catalog-pricetypes-import
      summary: Импорт множественных типов цен
      description: >
        > Метод импортирует цены. Типы цен нужны для последующей привязки к ним
        цен товаров, доступных для различных

        Дилеров (Селлеров). 


        При импорте типов цен проверяется наличие `id`. Если `id` найден, то тип
        цены будет

        обновлен. Если `id` не найден, то будет создан новый тип цен. 


        Возвращает статус добавления данных в 

        очередь на обработку, результат обработки которого можно проверить
        методом `import.status`.
      security:
        - api_key_auth: []
      parameters:
        - $ref: '#/components/parameters/Content-Type'
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/Api-Key'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PriceTypesRequest'
            example:
              price_types:
                - id: price-1
                  name: Дилерская цена, 1 уровня
                - id: price-2
                  name: Дилерская цена, 2 уровня
                - id: price-3
                  name: Дилерская цена, 3 уровня
      responses:
        '200':
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
                  stack_id:
                    type: number
              example:
                status: true
                message: Создана очередь на обновление типов цен
                stack_id: 30049
        '406':
          description: Неприемлемые данные
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      status:
                        type: boolean
                      message:
                        type: string
              examples:
                empty_body:
                  value:
                    status: false
                    message: Тело запроса пустое или не является json
                price_types_not_array:
                  value:
                    status: false
                    message: price_types должен быть массивом
  /distributor/v1/import.status:
    post:
      tags:
        - Работа со стеком импорта
      operationId: import-status
      summary: Получение результата обработки данных
      description: >
        > Метод возвращает результат обработки данных, поставленных в Стек
        очереди.
      security:
        - api_key_auth: []
      parameters:
        - $ref: '#/components/parameters/Content-Type'
        - $ref: '#/components/parameters/Accept'
        - $ref: '#/components/parameters/Api-Key'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                stack_id:
                  type: number
                  description: id очереди, который вернул метод при импорте данных.
            example:
              stack_id: 1234
      responses:
        '200':
          description: Успешный ответ
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  stack:
                    type: object
                    properties:
                      id:
                        type: string
                      status:
                        type: string
                      time_complete:
                        type: string
                        format: date-time
                      result:
                        type: object
                        properties:
                          all:
                            type: number
                          add:
                            type: number
                          upd:
                            type: number
                          errors:
                            type: number
              example:
                status: true
                stack:
                  id: '1234'
                  status: success
                  time_complete: 15.08.2023 16:59:12
                  result:
                    all: 2
                    add: 0
                    upd: 2
                    errors: 0
        '406':
          description: Неприемлемые данные
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  message:
                    type: string
              example:
                status: false
                message: stack_id должен быть числом
components:
  schemas:
    PriceTypesRequest:
      type: object
      properties:
        price_types:
          type: array
          description: Массив типов цен
          items:
            $ref: '#/components/schemas/PriceType'
      required:
        - price_types
    CatalogListResponse:
      type: object
      properties:
        status:
          type: boolean
        catalogs:
          type: array
          items:
            $ref: '#/components/schemas/CatalogList'
        count:
          type: number
    PriceType:
      type: object
      properties:
        id:
          type: string
          description: >-
            Уникальный идентификатор типа цены. Ограничен 40 символами.
            Разрешены только маленькие латинские буквы, тире и цифры.
          maxLength: 40
          pattern: ^[a-z0-9\-]+$
        name:
          type: string
          description: Название типа цены.
      required:
        - id
        - name
        - name
    CatalogList:
      type: object
      properties:
        code:
          type: string
        name:
          type: string
  securitySchemes:
    api_key_auth:
      type: apiKey
      in: header
      name: Api-Key
  parameters:
    Content-Type:
      name: Content-Type
      in: header
      required: true
      schema:
        type: string
        example:
          - application/json
    Accept:
      name: Accept
      in: header
      required: true
      schema:
        type: string
        example:
          - application/json
    Api-Key:
      name: Api-Key
      in: header
      required: true
      schema:
        type: string
