openapi: 3.0.4
info:
  title: versta.io Open API
  description: >-
    Спецификация к открытому API компании Верста. Для работы с API вам
    необходимо получить ключ доступа. Для получения ключа, пожалуйста, напишите
    нам на support@versta24.ru.
  version: v3
paths:
  /openapi/v3/Auth/byApiKey:
    get:
      tags:
        - Auth
      summary: Получение токена авторизации при помощи apiKey
      parameters:
        - name: accessRights[]
          in: query
          description: >-
            Список прав доступа, необходимых для текущего токена.  Список прав
            см. <a href="/docs/specification/accessRights/">справочник</a>.

            Данный параметр необязательный, если его не указать, то будут выданы
            все права, доступные текущему пользователю.
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: OK
  /openapi/v3-beta/Calc:
    post:
      tags:
        - Calc
      summary: Асинхронный расчет вариантов доставки.
      description: >-
        Метод запускает асинхронную задачу по расчету вариантов доставки на
        основе переданных параметров. 

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

        результаты расчета по мере их готовности.
      requestBody:
        description: Параметры для поиска вариантов доставки
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CalcRequest'
      responses:
        '202':
          description: >-
            Задача на расчет запущена успешно. Возвращает ссылку для получения
            статуса операции и результатов расчета.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CalcInitiationResponse'
        '400':
          description: Информация об ошибке.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
  /openapi/v3-beta/Calc/{requestId}:
    get:
      tags:
        - Calc
      summary: Информация о статусе выполнения расчета доставки.
      description: >-
        Метод возвращает текущий статус асинхронного расчета доставки, включая
        информацию о готовности поставщиков. 

        По умолчанию возвращается только статус выполнения без детальных
        вариантов доставки. 

        Можно указать поставщика через vendorCode для получения вариантов
        доставки от конкретного поставщика;

        Для получения всех вариантов доставки для vendorCode необходимо
        присвоить 'All'
      parameters:
        - name: requestId
          in: path
          description: >-
            Идентификатор операции, по которому осуществляется поиск информации
            о статусе расчета.
          required: true
          schema:
            type: string
        - name: vendorCode
          in: path
          description: >-
            (Необязательный) Фильтр по поставщику. Если указано, возвращает
            варианты доставки только от указанного поставщика.

            Если не указано, возвращаются информацию о результате расчета без
            вариантов доставки.
          required: true
          schema:
            type: string
        - name: deliveryType
          in: query
          description: >-
            Фильтр по типу доставки. Если указан, то вернуться только варианты
            доставки указанного типа. Если не указано, то вернуться все типы
            посчитанных вариантов доставки. \

            0 - Дверь-Дверь \

            1 - Дверь-ПВЗ \

            2 - ПВЗ-ПВЗ \

            3 - ПВЗ-Дверь
          schema:
            $ref: '#/components/schemas/ApiDeliveryType'
      responses:
        '200':
          description: >-
            Возвращает текущий статус задачи и, при необходимости, варианты
            доставки.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CalcResultResponse'
        '400':
          description: Операция с указанным requestId не найдена или описание об ошибке.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
  /openapi/v3-beta/Calc/{requestId}/{vendorCode}:
    get:
      tags:
        - Calc
      summary: Информация о статусе выполнения расчета доставки.
      description: >-
        Метод возвращает текущий статус асинхронного расчета доставки, включая
        информацию о готовности поставщиков. 

        По умолчанию возвращается только статус выполнения без детальных
        вариантов доставки. 

        Можно указать поставщика через vendorCode для получения вариантов
        доставки от конкретного поставщика;

        Для получения всех вариантов доставки для vendorCode необходимо
        присвоить 'All'
      parameters:
        - name: requestId
          in: path
          description: >-
            Идентификатор операции, по которому осуществляется поиск информации
            о статусе расчета.
          required: true
          schema:
            type: string
        - name: vendorCode
          in: path
          description: >-
            (Необязательный) Фильтр по поставщику. Если указано, возвращает
            варианты доставки только от указанного поставщика.

            Если не указано, возвращаются информацию о результате расчета без
            вариантов доставки.
          required: true
          schema:
            type: string
        - name: deliveryType
          in: query
          description: >-
            Фильтр по типу доставки. Если указан, то вернуться только варианты
            доставки указанного типа. Если не указано, то вернуться все типы
            посчитанных вариантов доставки. \

            0 - Дверь-Дверь \

            1 - Дверь-ПВЗ \

            2 - ПВЗ-ПВЗ \

            3 - ПВЗ-Дверь
          schema:
            $ref: '#/components/schemas/ApiDeliveryType'
      responses:
        '200':
          description: >-
            Возвращает текущий статус задачи и, при необходимости, варианты
            доставки.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CalcResultResponse'
        '400':
          description: Операция с указанным requestId не найдена или описание об ошибке.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorContainer'
components:
  schemas:
    AmountWithVAT:
      type: object
      properties:
        amount:
          type: number
          format: double
        vatRate:
          type: number
          format: double
      additionalProperties: false
    ApiCargoBodyTypes:
      enum:
        - 0
        - 1
        - 2
        - 4
      type: integer
      description: Тип кузова транспортного средства.
      format: int32
    ApiCargoLoadCapacity:
      enum:
        - 0
        - 1
        - 2
        - 3
        - 4
      type: integer
      description: Диапазоны грузоподъёмности груза.
      format: int32
    ApiCargoLoadingTypes:
      enum:
        - 0
        - 1
        - 2
        - 4
        - 8
      type: integer
      description: Типы погрузки/разгрузки.
      format: int32
    ApiCargoStates:
      enum:
        - 0
        - 1
      type: integer
      description: |-
        Состояние груза: 
        0 - Новый \
        1 - Б/У \
      format: int32
    ApiCargoTypes:
      enum:
        - 1
        - 2
        - 4
        - 8
        - 32
        - 64
        - 128
        - 256
      type: integer
      description: >-
        Тип груза для перевозки: \

        1 - Docs - Документы \

        2 - CargoRegular - Обычный груз \

        4 - CargoDanger - Опасный груз (к опасным грузам относятся грузы
        определенной категории. см. правила перевозки) 

        8 - CargoOversize - (устаревшее) Негабаритный груз - груз в котором одно
        из мест по сумме трех измерений первышает 270 см или

        вес превышает 80 кг. Вместо этого признака нужно передавать габариты и
        вес груза. Под каждого поставщика данный параметр определяется
        автоматически по габаритам. Сейчас ни на что не влияет \

        32 - CargoFragile - Хрупкий груз - груз при перевозке которого должны
        соблюдаться специальные условия размещения

        (см. правила перевозки) \

        64 - OnlineStoreOrder - Посылка интернет-магазина
      format: int32
    ApiContactTypes:
      enum:
        - 1
        - 2
        - 4
        - 8
      type: integer
      description: >-
        Типы адресов. В зависимости от типа адреса необходимо заполнять разные
        поля.

        1 = Door - Конкретный адрес (дверь) \

        2 = MailingList - Рассылка - рассылка работает только в пределах одного
        города. Не используется и будет удален в

        дальнейшем \

        4 = PickupPoint - Точка выдачи конкретного поставщика \

        8 = PostOffice - Отделение почты РФ (зарезервировано для будущего
        использования)
      format: int32
    ApiDeliveryType:
      enum:
        - 0
        - 1
        - 2
        - 3
      type: integer
      description: |-
        Тип доставки. \
        0 - Дверь-Дверь \
        1 - Дверь-ПВЗ \
        2 - ПВЗ-ПВЗ \
        3 - ПВЗ-Дверь
      format: int32
    ApiError:
      required:
        - code
        - message
      type: object
      properties:
        code:
          minLength: 1
          type: string
          description: Код ошибки <a href="/docs/specification/errors/">Справочник</a>
        message:
          minLength: 1
          type: string
          description: >-
            Текстовое сообщение с объяснением какая ошибка произошла и как её
            исправить
        target:
          type: string
          description: Путь к полю в запросе, из-за которого возникла ошибка
          nullable: true
      additionalProperties: false
    ApiErrorContainer:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ApiError'
          description: Перечень ошибок, которые возникли во время выполнения запроса
          nullable: true
      additionalProperties: false
    ApiFtlAttributes:
      type: object
      properties:
        cargoBodyType:
          $ref: '#/components/schemas/ApiCargoBodyTypes'
        cargoLoadingType:
          $ref: '#/components/schemas/ApiCargoLoadingTypes'
        cargoLoadCapacity:
          $ref: '#/components/schemas/ApiCargoLoadCapacity'
        additionalConditions:
          type: string
          description: Дополнительные условия
          nullable: true
        senderPackage:
          type: string
          description: Упаковка отправителя
          nullable: true
      additionalProperties: false
      description: >-
        Дополнительные параметры для выделенной машины
        v24.OpenApi.Models.ApiV1.Enums.ApiCargoTypes.FTL.
    ApiPickupPointType:
      enum:
        - 0
        - 1
        - 2
        - 3
        - 4
        - 5
      type: integer
      format: int32
    ApiPriceListModifier:
      type: object
      properties:
        id:
          type: integer
          format: int32
        description:
          type: string
          nullable: true
        priority:
          type: integer
          format: int32
      additionalProperties: false
    ApiServiceCalcStatus:
      enum:
        - 0
        - 10
      type: integer
      description: |-
        Статус расчёта запрошенной дополнительной услуги \
        0 - NotProvided - Услуга не оказана в варианте доставки \
        10 - Provided - Услуга оказана в варианте доставки
      format: int32
    ApiTransportRequirementsParameters:
      type: object
      properties:
        requirements:
          type: array
          items:
            $ref: '#/components/schemas/ApiTransportRequirementsType'
          description: Перечень требований к транспортному средству.
          nullable: true
      additionalProperties: false
      description: Параметры требований к транспортному средству
    ApiTransportRequirementsType:
      enum:
        - 0
        - 1
        - 2
        - 3
        - 4
        - 5
        - 6
      type: integer
      description: Требования к транспортному средству.
      format: int32
    ApiVatRate:
      enum:
        - 0
        - 5
        - 7
        - 10
        - 18
        - 20
        - 22
      type: integer
      description: |-
        Ставка НДС \
        VAT0 - НДС 0% \
        VAT5 - НДС 5% \
        VAT7 - НДС 7% \
        VAT10 - НДС 10% \
        VAT18 - НДС 18% \
        VAT20 - НДС 20% \
        VAT22 - НДС 22% \
      format: int32
    AssemblyWorksParameters:
      type: object
      properties:
        assemblersCount:
          type: integer
          description: Количество сборщиков. По умолчанию 1
          format: int32
          example: 2
      additionalProperties: false
      description: Параметры услуг "Работы по сборке" и "Работы по разборке"
    CalcInitiationResponse:
      required:
        - location
        - requestId
        - retryAfter
      type: object
      properties:
        location:
          minLength: 1
          type: string
          description: Ссылка для получения результата расчета
          example: >-
            https://api.versta24.ru/openapi/v3-beta/calc/983351ff-6cff-4537-ba95-eeac972cacca
        requestId:
          minLength: 1
          type: string
          description: Идентификатор операции.
          example: 983351ff-6cff-4537-ba95-eeac972cacca
        retryAfter:
          type: integer
          description: >-
            Рекомендуемое время для следующего запроса, если результат еще не
            готов. (указывается в секундах)
          format: int32
          example: 2
      additionalProperties: false
      description: Ответ на запрос инициации расчета доставки.
    CalcRequest:
      required:
        - cargo
        - receiver
        - sender
      type: object
      properties:
        sender:
          required:
            - countryId
            - cityId
          type: object
          properties:
            contactType:
              enum:
                - 1
                - 2
                - 4
                - 8
              type: integer
              description: >-
                Типы адресов. В зависимости от типа адреса необходимо заполнять
                разные поля. <br>Это перечисление поддерживает битовые флаги,
                что позволяет указывать комбинацию нескольких значений для
                расчета различных типов доставки. 
                                <br> 1 = Door - Конкретный адрес (дверь)<br>4 = PickupPoint - Точка выдачи конкретного поставщика <br> Пример: Указание нескольких значений позволяет комбинировать типы адресов, например: 5 указывает, что будут расчитаны варианты доставки как от/до двери, так и от/до точки выдачи.
            countryId:
              type: string
              description: >-
                Указывается двухбуквенный код страны в соответствии с ISO 3166-1
                alpha-2
                (https://ru.wikipedia.org/wiki/ISO_3166-1).<br>Обязателен, если
                не указаны координаты (latitude и longitude). Если указаны
                координаты, countryId может быть не заполнен.
            cityId:
              type: string
              description: >-
                Код города или населенного пункта

                Обязателен, если не указаны координаты (latitude и longitude).
                Если координаты указаны — параметр cityId может быть не
                заполнен.


                Приоритет выбора адреса:

                 1. Если указаны latitude и longitude — используются только координаты.
                 2. Если координаты не указаны — используются countryId, cityId, cityName и address.
                 3. Если по координатам не удалось распознать адрес — используются countryId, cityId, cityName и address.

                Формат значения зависит от страны. Для населенных пунктов:

                - внутри РФ - необходимо указывать код ФИАС (уровень 4 или 6)
                или КЛАДР,

                - в странах Беларуси, Казахстана и Узбекистана - Тип объекта и
                Идентификатор объекта в базе OpenStreetMap. Пример
                <i>relation:2465058</i>
                (https://ru.wikipedia.org/wiki/OpenStreetMap).

                - в остальных населенных пунктов за пределами РФ - Идентификатор
                объекта в базе GeoNames
                (https://ru.wikipedia.org/wiki/GeoNames).

                Город должен попадать в указанную в параметре country страну.

                Этот параметр очень важен и определяет в том числе какому
                поставщику будет передан заказа. Также этот параметр

                влияет на цену
            cityName:
              type: string
              description: >-
                Название города (опционально).

                Логика выбора:
                    1. Если указаны координаты — используются только координаты.
                    2. Если координаты не указаны, но указан CityId — используются CityId, а CityName игнорируется.
                    3. Если CityId не указан — выполняется поиск по CityName.
                Для точного определения, пожалуйста, используйте CityId или
                координаты.
            address:
              type: string
              description: >-
                Адрес произвольной строкой. Адрес должен относиться к указанному
                в city городу и стране - эта проверка не выполняется, но если в
                поле адрес будет указан адрес из другого региона - доставка не
                гарантируется. Не обязателен, но может влиять на стоимость
                доставки

                Обязателен, когда contactType=Door и не указаны координаты. Если
                указаны координаты, Address может быть не заполнен.
            postalCode:
              type: string
              description: Почтовый индекс населенного пункта. Не обязательный параметр
            latitude:
              type: double
              description: >-
                Широта адреса. Если указаны latitude и longitude, остальные
                параметры (countryId, cityId, address) становятся
                необязательными. В приоритете используются координаты.
            longitude:
              type: double
              description: >-
                Долгота адреса. Если указаны latitude и longitude, остальные
                параметры (countryId, cityId, address) становятся
                необязательными. В приоритете используются координаты.
            pickupPointId:
              type: string
              description: >-
                Идентификатор точки отгрузки. Обязательно, если ContactType =
                PickupPoint и VendorId= 16, 17,23,24;28,41; игнорируется, если
                ContactType не равен PickupPoint
            pickupPointVendorId:
              type: string
              description: >-
                Поставщик для PickupPointId. Обязательно для ContactType =
                PickupPoint; игнорируется, если ContactType не равен PickupPoint
            loadingWorks:
              type: object
              properties:
                floor:
                  type: integer
                  description: >-
                    На каком этаже выполняются работы по спуску груза. По
                    умолчанию 1
                hasFreightLift:
                  type: boolean
                  description: Имеется ли грузовой лифт
                loadersCount:
                  type: integer
                  description: Количество грузчиков. По умолчанию 1
              description: Погрузочные работы
            assemblyWorks:
              type: object
              properties:
                assemblersCount:
                  type: integer
                  description: Количество сборщиков. По умолчанию 1
              description: Работы по разборке груза
            transportRequirements:
              type: object
              properties:
                requirements:
                  type: ApiTransportRequirementsType[]
                  description: >-
                    Перечень требований к транспортному средству. Необходимо
                    указать массив требований, которые необходимы для
                    транспорта. Список требований можно посмотреть: <a
                    href="/docs/specification/transportRequirementsType/">Справочник
                    значений</a>
              description: Требования к транспорту для получателя
          description: Информация об отправителе
          example:
            contactType: 1
            countryId: RU
            cityId: 0c5b2444-70a0-4932-980c-b4dc0d3f02b5
            postalCode: '101000'
            address: Смоленская площадь, д. 3
            loadingWorks:
              floor: 2
              hasFreightLift: false
              loadersCount: 5
        receiver:
          required:
            - countryId
            - cityId
          type: object
          properties:
            contactType:
              enum:
                - 1
                - 2
                - 4
                - 8
              type: integer
              description: >-
                Типы адресов. В зависимости от типа адреса необходимо заполнять
                разные поля. <br>Это перечисление поддерживает битовые флаги,
                что позволяет указывать комбинацию нескольких значений для
                расчета различных типов доставки. 
                                <br> 1 = Door - Конкретный адрес (дверь)<br>4 = PickupPoint - Точка выдачи конкретного поставщика <br> Пример: Указание нескольких значений позволяет комбинировать типы адресов, например: 5 указывает, что будут расчитаны варианты доставки как от/до двери, так и от/до точки выдачи.
            countryId:
              type: string
              description: >-
                Указывается двухбуквенный код страны в соответствии с ISO 3166-1
                alpha-2
                (https://ru.wikipedia.org/wiki/ISO_3166-1).<br>Обязателен, если
                не указаны координаты (latitude и longitude). Если указаны
                координаты, countryId может быть не заполнен.
            cityId:
              type: string
              description: >-
                Код города или населенного пункта

                Обязателен, если не указаны координаты (latitude и longitude).
                Если координаты указаны — параметр cityId может быть не
                заполнен.


                Приоритет выбора адреса:

                 1. Если указаны latitude и longitude — используются только координаты.
                 2. Если координаты не указаны — используются countryId, cityId, cityName и address.
                 3. Если по координатам не удалось распознать адрес — используются countryId, cityId, cityName и address.

                Формат значения зависит от страны. Для населенных пунктов:

                - внутри РФ - необходимо указывать код ФИАС (уровень 4 или 6)
                или КЛАДР,

                - в странах Беларуси, Казахстана и Узбекистана - Тип объекта и
                Идентификатор объекта в базе OpenStreetMap. Пример
                <i>relation:2465058</i>
                (https://ru.wikipedia.org/wiki/OpenStreetMap).

                - в остальных населенных пунктов за пределами РФ - Идентификатор
                объекта в базе GeoNames
                (https://ru.wikipedia.org/wiki/GeoNames).

                Город должен попадать в указанную в параметре country страну.

                Этот параметр очень важен и определяет в том числе какому
                поставщику будет передан заказа. Также этот параметр

                влияет на цену
            cityName:
              type: string
              description: >-
                Название города (опционально).

                Логика выбора:
                    1. Если указаны координаты — используются только координаты.
                    2. Если координаты не указаны, но указан CityId — используются CityId, а CityName игнорируется.
                    3. Если CityId не указан — выполняется поиск по CityName.
                Для точного определения, пожалуйста, используйте CityId или
                координаты.
            address:
              type: string
              description: >-
                Адрес произвольной строкой. Адрес должен относиться к указанному
                в city городу и стране - эта проверка не выполняется, но если в
                поле адрес будет указан адрес из другого региона - доставка не
                гарантируется. Не обязателен, но может влиять на стоимость
                доставки

                Обязателен, когда contactType=Door и не указаны координаты. Если
                указаны координаты, Address может быть не заполнен.
            postalCode:
              type: string
              description: Почтовый индекс населенного пункта. Не обязательный параметр
            latitude:
              type: double
              description: >-
                Широта адреса. Если указаны latitude и longitude, остальные
                параметры (countryId, cityId, address) становятся
                необязательными. В приоритете используются координаты.
            longitude:
              type: double
              description: >-
                Долгота адреса. Если указаны latitude и longitude, остальные
                параметры (countryId, cityId, address) становятся
                необязательными. В приоритете используются координаты.
            pickupPointId:
              type: string
              description: >-
                Идентификатор точки выдачи. Обязательно для ContactType =
                PickupPoint; игнорируется, если ContactType не равен PickupPoint
            pickupPointVendorId:
              type: string
              description: >-
                Поставщик для PickupPointId. Обязательно для ContactType =
                PickupPoint; игнорируется, если ContactType не равен PickupPoint
            loadingWorks:
              type: object
              properties:
                floor:
                  type: integer
                  description: >-
                    На каком этаже выполняются работы по подъему груза. По
                    умолчанию 1
                hasFreightLift:
                  type: boolean
                  description: Имеется ли грузовой лифт
                loadersCount:
                  type: integer
                  description: Количество грузчиков. По умолчанию 1
              description: Разгрузочные работы
            assemblyWorks:
              type: object
              properties:
                assemblersCount:
                  type: integer
                  description: Количество сборщиков. По умолчанию 1
              description: Работы по сборке груза
            transportRequirements:
              type: object
              properties:
                requirements:
                  type: ApiTransportRequirementsType[]
                  description: >-
                    Перечень требований к транспортному средству. Необходимо
                    указать массив требований, которые необходимы для
                    транспорта. Список требований можно посмотреть: <a
                    href="/docs/specification/transportRequirementsType/">Справочник
                    значений</a>
              description: Требования к транспорту для отправителя
          description: Информация о получателе
          example:
            contactType: 1
            countryId: RU
            cityId: c2deb16a-0330-4f05-821f-1d09c93331e6
            postalCode: '190000'
            address: ул. Рентгена, 4а
        cargo:
          $ref: '#/components/schemas/CargoDescModel'
        optionFilter:
          $ref: '#/components/schemas/OptionFilter'
        pickupInfo:
          $ref: '#/components/schemas/CallCourierPickupInfo'
        services:
          type: array
          items:
            $ref: '#/components/schemas/Service'
          description: >-
            Перечень дополнительных услуг (страховка, наложенный платеж,
            частичный выкуп и т.д.)
          nullable: true
          example:
            - code: Insurance
              parameter: '1000'
        receiverDeliveryCharge:
          type: number
          description: >-
            Дополнительный сбор за доставку с получателя. Используется для
            расчёта комиссии за наложенный платёж
          format: double
          example: 100
        companyId:
          type: integer
          description: >-
            Идентификатор компании от которой создается заказ. Если значение не
            задано, то используется идентификатор компании,

            которой принадлежит ключ API.

            Чтобы получить идентификаторы для работы с вашими компаниями,
            пожалуйста, обратитесь на support@versta24.ru
          format: int32
          nullable: true
          example: null
      additionalProperties: false
    CalcResultOptionsInfo:
      type: object
      properties:
        state:
          type: string
          description: Результат расчета вариантов доставки
          nullable: true
        priceListId:
          type: integer
          description: Id райслиста, по которому рассчитывали варианты доставки
          format: int32
        priceListName:
          type: string
          description: Название прайслиста
          nullable: true
        vendorId:
          type: integer
          description: Поставщик
          format: int32
        cacheRequestTime:
          type: string
          format: date-span
        vendorRequestTime:
          type: string
          format: date-span
        totalCalcTime:
          type: string
          format: date-span
        vendorBLTime:
          type: string
          format: date-span
        createDate:
          type: string
          format: date-time
        initSettingsTime:
          type: string
          format: date-span
        calcDeliveryOptionTime:
          type: string
          format: date-span
      additionalProperties: false
      description: >-
        Дополнительная информация о расчете вариантов доставки по каждому
        прайслисту
    CalcResultResponse:
      required:
        - expiredAt
        - issuedAt
        - location
        - readyVendors
        - requestId
        - retryAfter
        - status
        - totalVendors
        - vendors
      type: object
      properties:
        status:
          minLength: 1
          type: string
          description: >-
            Статус задачи расчета. <a
            href="/docs/specification/asyncCalcStatuses/">Справочник
            значений</a>
        issuedAt:
          type: string
          description: Дата и время создания задачи.
          format: date-time
          example: '2024-10-18T10:00:00'
        expiredAt:
          type: string
          description: |-
            Дата и время, до которых результат расчета доступен для получения.
            После наступления этого времени результат будет удален.
          format: date-time
          example: '2024-10-18T12:00:00'
        readyVendors:
          type: integer
          description: Количество поставщиков, по которым готов результат.
          format: int32
          example: 3
        totalVendors:
          type: integer
          description: Общее количество поставщиков, по которым производится расчет.
          format: int32
          example: 5
        vendors:
          type: array
          items:
            $ref: '#/components/schemas/VendorCalcInfo'
          description: Информация о результате расчета по каждому поставщику.
        options:
          type: array
          items:
            $ref: '#/components/schemas/DeliveryOption'
          description: Доступные варианты доставки (если был передан параметр VendorCode).
          nullable: true
        location:
          minLength: 1
          type: string
          description: Ссылка для получения результата расчета
          example: >-
            https://api.versta24.ru/openapi/v3-beta/calc/983351ff-6cff-4537-ba95-eeac972cacca
        requestId:
          minLength: 1
          type: string
          description: Идентификатор операции.
          example: 983351ff-6cff-4537-ba95-eeac972cacca
        retryAfter:
          type: integer
          description: >-
            Рекомендуемое время для следующего запроса, если результат еще не
            готов. (указывается в секундах)
          format: int32
          example: 2
      additionalProperties: false
      description: Содержит информацию о статусе асинхронного расчета доставки.
    CalcServiceResult:
      required:
        - code
      type: object
      properties:
        code:
          minLength: 1
          type: string
          description: >-
            Наименование услуги. Например: Insurance 


            Список услуг см. <a
            href="/docs/specification/services/">справочник</a>
          example: Insurance
        status:
          $ref: '#/components/schemas/ApiServiceCalcStatus'
      additionalProperties: false
    CallCourierPickupInfo:
      type: object
      properties:
        autoChangeTakeDate:
          type: boolean
          description: >-
            Если true, то система будет пытаться автоматически поменять дату
            забора на ближайший доступный день, если на дату,

            заданную в TakeDate, передача заказа с заданными VendorId и TariffId
            невозможна.

            По умолчанию, true.

            ПАРАМЕТР УСТАРЕЛ И БУДЕТ УДАЛЁН.
        takeDate:
          type: string
          description: >-
            Указывается дата забора груза в формате yyyy-MM-dd.

            По умолчанию - текущая дата.

            Не все поставщики могут выполнять забор в выходные дни.

            Также существуют ограничения на время размещения заказа с датой
            забора сегодня.

            Ближайшая доступная дата забора заказа возвращается в варианте
            доставки в takeDate.
          nullable: true
          example: '2020-03-31'
        timeFrom:
          type: string
          description: >-
            Указывается ограничение на время забора (начальное). Это ограничение
            носит рекомендательный характер и не всегда

            может быть соблюдено.

            По умолчанию указывается время забора 09:00.
          format: date-span
          example: '12:00'
        timeTo:
          type: string
          description: >-
            Указывается ограничение на время забора (конечное). Это ограничение
            носит рекомендательный характер и не всегда

            может быть соблюдено.

            По умолчанию указывается время забора 18:00.
          format: date-span
          example: '15:00'
      additionalProperties: false
      description: Сведения по забору заказа у отправителя
    CargoDescModel:
      required:
        - cargoItems
        - cargoType
      type: object
      properties:
        cargoType:
          $ref: '#/components/schemas/ApiCargoTypes'
        cargoState:
          $ref: '#/components/schemas/ApiCargoStates'
        isApproximateParameters:
          type: boolean
          description: Признак того, что указанные в CargoItems параметры примерные
        cargoItems:
          type: array
          items:
            $ref: '#/components/schemas/CargoItemModel'
          description: >-
            Массив с описанием параметров мест. Как минимум одно место должно
            быть описано
        cargoProducts:
          type: array
          items:
            $ref: '#/components/schemas/CargoProductModel'
          description: Массив с описанием параметров перевозимых товаров
          nullable: true
        description:
          type: string
          description: >-
            Краткое описание груза. Обязательно для любого типа груза, кроме
            документов
          nullable: true
          example: Важные документы
        customsValue:
          type: number
          description: >-
            Таможенная стоимость отправления. Обязательно указывается, если
            страна получателя и отправителя не совпадают

            (отправление пересекает границу)
          format: double
          nullable: true
          example: 100.99
        customsCurrency:
          type: string
          description: >-
            Трехбуквенный код валюты таможенной стоимости в соответствии с ISO
            4217 (https://ru.wikipedia.org/wiki/ISO_4217)
          nullable: true
          example: RUB
        natureOfGoods:
          type: string
          description: >-
            Характер груза (внутренний код Versta). Для получения доступных
            значений используйте GET /openapi/v2/NatureOfGoods. \

            Обязателен для передачи заказов некоторым поставщикам (Деловые
            Линии, Спецсвязь, KIT и др). \
          nullable: true
          example: tires
        isUsed:
          type: boolean
          description: Признак того, что груз является б/у
        hsCode:
          type: string
          description: Товарная номенклатура внешнеэкономической деятельности
          nullable: true
          example: '4901990000'
        weight:
          type: number
          format: double
          readOnly: true
      additionalProperties: false
      description: cargoDescModel - описание груза
    CargoItemModel:
      required:
        - qty
        - weight
      type: object
      properties:
        weight:
          type: number
          description: Вес места в кг
          format: double
          example: 0.5
        qty:
          type: integer
          description: Указывается кол-во грузомест с обозначенными параметрами
          format: int32
          example: 2
        l:
          type: number
          description: >-
            Габарит длина в сантиметрах.

            Габаритные значения груза необходимы для расчета объемного веса. Они
            необязательны для документов, но если указан

            хоть один, остальные также должны быть заданы
          format: double
          nullable: true
          example: 13.5
        h:
          type: number
          description: >-
            Габарит высота в сантиметрах.

            Габаритные значения груза необходимы для расчета объемного веса. Они
            необязательны для документов, но если указан

            хоть один, остальные также должны быть заданы
          format: double
          nullable: true
          example: 10
        w:
          type: number
          description: >-
            Габарит ширина в сантиметрах.

            Габаритные значения груза необходимы для расчета объемного веса. Они
            необязательны для документов, но если указан

            хоть один, остальные также должны быть заданы
          format: double
          nullable: true
          example: 20
        volumeWeight:
          type: number
          description: >-
            Объемный вес в кг. Если заданы габаритные размеры груза, то
            рассчитывается объемный вес. Этот параметр

            рассчитывается автоматически и НЕ ЗАПОЛНЯЕТСЯ при создании заказа.
          format: double
          nullable: true
        description:
          type: string
          description: Описание грузоместа или комментарии к грузоместу
          nullable: true
          example: Ноутбук
        volume:
          type: number
          description: >-
            Объем в кубических метрах для всего грузового места. 

            Этот параметр является необязательным. Если он указан, то его
            значение применяется ко всей посылке. 

            Если указано значение для `Volume`, то в CargoItems может быть
            указан только один объект.
          format: double
          nullable: true
          example: 6
      additionalProperties: false
      description: cargoItemModel - описание грузоместа
    CargoProductModel:
      required:
        - name
        - productId
        - qty
      type: object
      properties:
        barcode:
          maxLength: 50
          type: string
          description: >-
            Маркировка товара. Если указана маркировка, Qty не может быть больше
            1
          nullable: true
        productId:
          maxLength: 50
          minLength: 1
          type: string
          description: Идентификатор/артикул товара
          example: A12B3456
        name:
          maxLength: 255
          minLength: 1
          type: string
          description: 'Название товара. Может содержать его описание: размер, цвет и т.д.'
          example: Мобильные телефоны Nokia
        weight:
          type: number
          description: >-
            Вес единицы товара в кг. Если не задан, то считаем что вес товара
            0.1 кг
          format: double
          example: 0.1
        cost:
          type: number
          description: Объявленная стоимость единицы товара
          format: double
          example: 600
        costForReceiver:
          type: number
          description: |-
            Сумма, которую оплачивает получатель при вручении.
            Обязателен для заполнения, если запрошена услуга "Наложенный платеж"
          format: double
          nullable: true
          example: 800
        vatRate:
          $ref: '#/components/schemas/ApiVatRate'
        qty:
          type: integer
          description: >-
            Количество товаров. Не может быть больше 1, если указана маркировка
            (Barcode)
          format: int32
          example: 1
        purchasedQty:
          type: integer
          description: Количество выкупленных товаров. Если данных о выкупе нет - null
          format: int32
          nullable: true
        purchasedAmount:
          type: number
          description: Сумма оплаты за выкупленные товары. Если данных о выкупе нет - null
          format: double
          nullable: true
        serialNumber:
          type: string
          nullable: true
        cargoItemIndex:
          type: integer
          description: >-
            Индекс места v24.OpenApi.Models.ApiV1.Orders.CargoItemModel, к
            которому относится товар
          format: int32
      additionalProperties: false
      description: CargoProductModel - описание перевозимого товара
    DeliveryInfo:
      required:
        - takeDate
      type: object
      properties:
        takeDate:
          type: string
          description: >-
            Дата забора (может не совпадать с переданной в запросе, если данный
            вариант тарифа уже нельзя сделать с забором на

            указанную дату)
          format: date-time
          example: '2020-04-16'
        deliveryDateFrom:
          type: string
          description: Планируемая дата доставки (от)
          format: date-time
          nullable: true
          example: '2020-04-16T00:00:00+03:00'
        deliveryDateTo:
          type: string
          description: Планируемая дата доставки (до)
          format: date-time
          nullable: true
          example: '2020-04-17T00:00:00+03:00'
        minDays:
          type: integer
          description: Минимальное количество дней доставки
          format: int32
          nullable: true
        maxDays:
          type: integer
          description: Максимальное количество дней доставки
          format: int32
          nullable: true
      additionalProperties: false
      description: >-
        Информация о доставке, включая даты забора и предполагаемые сроки
        доставки.
    DeliveryOption:
      required:
        - delivery
        - price
        - tariff
        - vendorInfo
      type: object
      properties:
        vendorInfo:
          $ref: '#/components/schemas/VendorInfo'
        delivery:
          $ref: '#/components/schemas/DeliveryInfo'
        tariff:
          $ref: '#/components/schemas/TariffInfo'
        price:
          $ref: '#/components/schemas/PriceInfo'
        tags:
          type: array
          items:
            type: string
          description: >-
            Теги. Перечень, который содержит дополнительные указания к вариантам
            доставки. Например, может быть указан способ транспортировки заказа
            Авиа / наземный транспорт
          nullable: true
          example:
            - Авиа
        deliveryType:
          $ref: '#/components/schemas/ApiDeliveryType'
        services:
          type: array
          items:
            $ref: '#/components/schemas/CalcServiceResult'
          description: Перечень результатов расчёта дополнительных услуг
          nullable: true
        weightCalc:
          type: number
          description: >-
            Расчётный вес (платный вес). Вес в кг, по которому поставщик
            посчитал стоимость доставки
          format: double
        fromPickupPointType:
          $ref: '#/components/schemas/ApiPickupPointType'
        toPickupPointType:
          $ref: '#/components/schemas/ApiPickupPointType'
      additionalProperties: false
      description: Модель варианта доставки
    DeliveryOptionMeta:
      type: object
      properties:
        appliedModifiers:
          type: array
          items:
            $ref: '#/components/schemas/ApiPriceListModifier'
          description: Модификаторы, которые были применены для варианта доставки
          nullable: true
        confirmNeeded:
          type: boolean
          description: Требуется ли согласование
        specialOfferLabelText:
          type: string
          nullable: true
        specialOfferLabelColor:
          type: string
          nullable: true
        isByRequest:
          type: boolean
        specialOfferText:
          type: string
          nullable: true
        productType:
          type: string
          description: Тип продукта
          nullable: true
        rating:
          type: number
          description: Рейтинг данного варианта доставки
          format: double
          nullable: true
        alerts:
          type: array
          items:
            $ref: '#/components/schemas/OptionAlert'
          description: Список предупреждений
          nullable: true
        backgroundColor:
          type: string
          nullable: true
        requiredFields:
          type: object
          additionalProperties:
            uniqueItems: true
            type: array
            items:
              type: string
            nullable: true
          description: |-
            Обязательные поля на фронте 

            Пример: {"productInfo": ["name", "article", "qty"]}
          nullable: true
        optionIcons:
          type: array
          items:
            $ref: '#/components/schemas/OptionIcon'
          description: Иконки, которые необходимо отобразить на фронте
          nullable: true
      additionalProperties: false
      description: |-
        Метаинформация и дополнительные характеристики варианта доставки.
        (Используется для отображения информации в webApi)
    LoadingWorksParameters:
      type: object
      properties:
        floor:
          type: integer
          description: На каком этаже выполняются работы. Спуск/подъем. По умолчанию 1
          format: int32
          example: 1
        hasFreightLift:
          type: boolean
          description: Имеется ли грузовой лифт
        loadersCount:
          type: integer
          description: Количество грузчиков. По умолчанию 1
          format: int32
          example: 2
      additionalProperties: false
      description: |-
        Параметры услуг "Погрузочные работы" и "Разгрузочные работы"
        v24.OpenApi.Models.ApiV2.Contacts.RoutePoint.AssemblyWorks
    OptionAlert:
      type: object
      properties:
        text:
          type: string
          nullable: true
        color:
          type: string
          nullable: true
      additionalProperties: false
    OptionFilter:
      type: object
      properties:
        tariffIdFilter:
          type: array
          items:
            type: string
          description: >-
            Массив идентификаторов тарифов поставщиков. Используется, как фильтр
            в расчете вариантов доставки. Если массив

            задан, то в ответе будут варианты доставки только с указанными в
            этом массиве тарифами. Необязательный параметр
          nullable: true
          example:
            - '4'
            - '1'
        vendorsIdFilter:
          type: array
          items:
            type: integer
            format: int32
          description: >-
            Массив идентификаторов поставщиков. Используется, как фильтр в
            расчете вариантов доставки. Если массив задан, то в

            ответе будут варианты доставки только от указанных в этом массиве
            поставщиков. Необязательный параметр
          nullable: true
          example:
            - 0
            - 8
      additionalProperties: false
      description: Фильтр вариантов доставки по поставщикам и тарифам
    OptionIcon:
      type: object
      properties:
        icon:
          type: string
          nullable: true
        color:
          type: string
          nullable: true
        scope:
          type: string
          nullable: true
        key:
          type: string
          nullable: true
      additionalProperties: false
    PartialPaySurchargeRule:
      type: object
      properties:
        paymentThreshold:
          type: integer
          description: Порог доплаты
          format: int32
        deliverySurcharge:
          type: integer
          description: Доплата за доставку
          format: int32
      additionalProperties: false
      description: Правило доплаты за доставку при частичном выкупе
    PriceInfo:
      required:
        - isApproximatePrice
        - price
        - tariffPriceOnly
      type: object
      properties:
        price:
          type: number
          description: >-
            Полная стоимость доставки в рублях. Включая все дополнительные
            сервисы, страховку и налоги и НДС (если

            применимо)
          format: double
          example: 490
        tariffPriceOnly:
          type: number
          description: >-
            Цена тарифа без дополнительных сервисов и страховки. Включая все
            налоги и НДС (если применимо)
          format: double
          example: 490
        isApproximatePrice:
          type: boolean
          description: Данный признак означает, что стоимость доставки является примерной
      additionalProperties: false
      description: Информация о стоимости доставки
    PriceListCalcInfo:
      type: object
      properties:
        status:
          type: string
          description: Статус выполнения расчета
          nullable: true
        priceListId:
          type: integer
          description: Id прайслиста
          format: int32
        message:
          type: string
          description: Сообщение об ошибке, если она была
          nullable: true
        totalOptions:
          type: integer
          description: Количество вариантов доставки
          format: int32
        executedTime:
          type: string
          description: Время выполнения расчета
          format: date-span
      additionalProperties: false
      description: Информация о расчете вариантов доставки
    RoutePoint:
      required:
        - cityId
        - countryId
      type: object
      properties:
        contactType:
          $ref: '#/components/schemas/ApiContactTypes'
        countryId:
          minLength: 1
          type: string
        cityId:
          minLength: 1
          type: string
        cityName:
          type: string
          nullable: true
        postalCode:
          type: string
          nullable: true
        pickupPointId:
          type: string
          nullable: true
        latitude:
          type: number
          description: >-
            Широта. Если указаны latitude и longitude, остальные параметры
            (countryId, cityId, address) становятся необязательными.

            В приоритете используются координаты.
          format: double
          nullable: true
        longitude:
          type: number
          description: >-
            Долгота. Если указаны latitude и longitude, остальные параметры
            (countryId, cityId, address) становятся необязательными.

            В приоритете используются координаты.
          format: double
          nullable: true
        pickupPointVendorId:
          type: integer
          format: int32
          nullable: true
        pickupPointType:
          $ref: '#/components/schemas/ApiPickupPointType'
        loadingWorks:
          $ref: '#/components/schemas/LoadingWorksParameters'
        transportRequirements:
          $ref: '#/components/schemas/ApiTransportRequirementsParameters'
        assemblyWorks:
          $ref: '#/components/schemas/AssemblyWorksParameters'
        partialPayParameters:
          type: array
          items:
            $ref: '#/components/schemas/PartialPaySurchargeRule'
          description: >-
            Параметры услуги "Частичный выкуп"

            При выкупе на сумму порога оплаты или ниже – соответствующая доплата
            за доставку.

            Для выкупа выше порога оплаты – доплата отсутствует.
          nullable: true
        address:
          type: string
          nullable: true
      additionalProperties: false
      description: RoutePoint -  Описание точки маршрута
    Service:
      required:
        - code
      type: object
      properties:
        code:
          minLength: 1
          type: string
          description: >-
            Наименование услуги. Например: Insurance 


            Список услуг см. <a
            href="/docs/specification/services/">справочник</a>
          example: Insurance
        parameter:
          type: string
          description: >-
            Параметр услуги. Например, страховая стоимость, сумма наложенного
            платежа и др.
          nullable: true
          example: '1000'
      additionalProperties: false
    ServiceParameters:
      type: object
      properties:
        vendorContractId:
          type: integer
          format: int32
          nullable: true
        vendorInvoiceNumber:
          type: string
          nullable: true
        vendorTariffId:
          type: string
          nullable: true
        vendorTariffName:
          type: string
          nullable: true
        comments:
          type: string
          nullable: true
        parameters:
          type: string
          nullable: true
      additionalProperties: false
    TariffInfo:
      required:
        - tariffId
        - tariffName
      type: object
      properties:
        tariffId:
          minLength: 1
          type: string
          description: >-
            Идентификатор данного вида доставки у указанного поставщика. \

            Поля VendorId, TariffId и TakeDate передаются для указания
            конкретного варианта доставки
          example: '4'
        tariffName:
          minLength: 1
          type: string
          description: Название тарифа
          example: Срочная
        comments:
          type: string
          description: Произвольные комментарии к тарифу, если есть
          nullable: true
          example: Москва - Санкт-Петербург Срочная доставка
      additionalProperties: false
      description: Информация о тарифе доставки
    VendorCalcInfo:
      required:
        - location
        - status
        - vendorCode
      type: object
      properties:
        status:
          minLength: 1
          type: string
          description: Статус готовности вариантов доставки.
          example: Finished
        location:
          minLength: 1
          type: string
          description: URI-адрес для получения вариантов доставки от поставщика.
          example: >-
            https://api.versta24.ru/openapi/v3-beta/calc/983351ff-6cff-4537-ba95-eeac972cacca/Versta
        vendorCode:
          minLength: 1
          type: string
          description: >-
            Внутренний идентификатор поставщика от которого был получен данный
            вариант.
          example: Versta
      additionalProperties: false
      description: Содержит информацию о результате расчета по поставщику
    VendorContractType:
      enum:
        - 0
        - 1
      type: integer
      description: |-
        Тип договора с поставщиком \
        0 = Versta - Договор vertsa24 \
        1 = Own - Клиентский договор
      format: int32
    VendorInfo:
      required:
        - vendorContractType
        - vendorId
        - vendorLogoUrl
        - vendorName
      type: object
      properties:
        vendorId:
          type: integer
          description: >-
            Внутренний идентификатор вендора от которого был получен данный
            вариант.
          format: int32
          example: 0
        vendorName:
          minLength: 1
          type: string
          description: Название поставщика
          example: Versta
        vendorLogoUrl:
          minLength: 1
          type: string
          description: Ссылка на лого вендора для его отображения пользователю
          example: https://my.versta24.ru/img/vendors/Versta.png
        vendorContractType:
          $ref: '#/components/schemas/VendorContractType'
      additionalProperties: false
      description: Информация о поставщике.
