{
  "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=\"/api/reference/accessRights\">справочник</a>.\nДанный параметр необязательный, если его не указать, то будут выданы все права, доступные текущему пользователю.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/openapi/v3-beta/Calc": {
      "post": {
        "tags": [
          "Calc"
        ],
        "summary": "Асинхронный расчет вариантов доставки.",
        "description": "Метод запускает асинхронную задачу по расчету вариантов доставки на основе переданных параметров. \nВ случае успешного запуска возвращается ссылка, по которой можно получить статус задачи и \nрезультаты расчета по мере их готовности.",
        "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": "Метод возвращает текущий статус асинхронного расчета доставки, включая информацию о готовности поставщиков. \nПо умолчанию возвращается только статус выполнения без детальных вариантов доставки. \nМожно указать поставщика через vendorCode для получения вариантов доставки от конкретного поставщика;\nДля получения всех вариантов доставки для vendorCode необходимо присвоить 'All'",
        "parameters": [
          {
            "name": "requestId",
            "in": "path",
            "description": "Идентификатор операции, по которому осуществляется поиск информации о статусе расчета.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "vendorCode",
            "in": "path",
            "description": "(Необязательный) Фильтр по поставщику. Если указано, возвращает варианты доставки только от указанного поставщика.\nЕсли не указано, возвращаются информацию о результате расчета без вариантов доставки.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deliveryType",
            "in": "query",
            "description": "Фильтр по типу доставки. Если указан, то вернуться только варианты доставки указанного типа. Если не указано, то вернуться все типы посчитанных вариантов доставки. \\\n0 - Дверь-Дверь \\\n1 - Дверь-ПВЗ \\\n2 - ПВЗ-ПВЗ \\\n3 - ПВЗ-Дверь",
            "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": "Метод возвращает текущий статус асинхронного расчета доставки, включая информацию о готовности поставщиков. \nПо умолчанию возвращается только статус выполнения без детальных вариантов доставки. \nМожно указать поставщика через vendorCode для получения вариантов доставки от конкретного поставщика;\nДля получения всех вариантов доставки для vendorCode необходимо присвоить 'All'",
        "parameters": [
          {
            "name": "requestId",
            "in": "path",
            "description": "Идентификатор операции, по которому осуществляется поиск информации о статусе расчета.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "vendorCode",
            "in": "path",
            "description": "(Необязательный) Фильтр по поставщику. Если указано, возвращает варианты доставки только от указанного поставщика.\nЕсли не указано, возвращаются информацию о результате расчета без вариантов доставки.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deliveryType",
            "in": "query",
            "description": "Фильтр по типу доставки. Если указан, то вернуться только варианты доставки указанного типа. Если не указано, то вернуться все типы посчитанных вариантов доставки. \\\n0 - Дверь-Дверь \\\n1 - Дверь-ПВЗ \\\n2 - ПВЗ-ПВЗ \\\n3 - ПВЗ-Дверь",
            "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": "Состояние груза:\n0 - Новый \\\n1 - Б/У \\",
        "format": "int32"
      },
      "ApiCargoTypes": {
        "enum": [
          1,
          2,
          4,
          8,
          32,
          64,
          128,
          256,
          512
        ],
        "type": "integer",
        "description": "Тип груза для перевозки: \\\n1 - Docs - Документы \\\n2 - CargoRegular - Обычный груз \\\n4 - CargoDanger - Опасный груз (к опасным грузам относятся грузы определенной категории. см. правила перевозки)\n8 - CargoOversize - (устаревшее) Негабаритный груз - груз в котором одно из мест по сумме трех измерений первышает 270 см или\nвес превышает 80 кг. Вместо этого признака нужно передавать габариты и вес груза. Под каждого поставщика данный параметр определяется\nавтоматически по габаритам. Сейчас ни на что не влияет \\\n32 - CargoFragile - Хрупкий груз - груз при перевозке которого должны соблюдаться специальные условия размещения\n(см. правила перевозки) \\\n64 - OnlineStoreOrder - Посылка интернет-магазина\n128 - LTL -  Сборный груз\n256 - FTL - Выделенная машина\n512 - RussianPostDocs - Документы почты России.",
        "format": "int32"
      },
      "ApiContactTypes": {
        "enum": [
          1,
          2,
          4,
          8
        ],
        "type": "integer",
        "description": "Типы адресов. В зависимости от типа адреса необходимо заполнять разные поля.\n1 = Door - Конкретный адрес (дверь) \\\n2 = MailingList - Рассылка - рассылка работает только в пределах одного города. Не используется и будет удален в\nдальнейшем \\\n4 = PickupPoint - Точка выдачи конкретного поставщика \\\n8 = PostOffice - Отделение почты РФ (зарезервировано для будущего использования)",
        "format": "int32"
      },
      "ApiDangerClass": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9
        ],
        "type": "integer",
        "description": "Класс опасности груза",
        "format": "int32"
      },
      "ApiDeliveryType": {
        "enum": [
          0,
          1,
          2,
          3
        ],
        "type": "integer",
        "description": "Тип доставки. \\\n0 - Дверь-Дверь \\\n1 - Дверь-ПВЗ \\\n2 - ПВЗ-ПВЗ \\\n3 - ПВЗ-Дверь",
        "format": "int32"
      },
      "ApiError": {
        "required": [
          "code",
          "message"
        ],
        "type": "object",
        "properties": {
          "code": {
            "minLength": 1,
            "type": "string",
            "description": "Код ошибки <a href=\"/api/reference/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": "Статус расчёта запрошенной дополнительной услуги \\\n0 - NotProvided - Услуга не оказана в варианте доставки \\\n10 - 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": "Ставка НДС \\\nVAT0 - НДС 0% \\\nVAT5 - НДС 5% \\\nVAT7 - НДС 7% \\\nVAT10 - НДС 10% \\\nVAT18 - НДС 18% \\\nVAT20 - НДС 20% \\\nVAT22 - НДС 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": [
              "cityId",
              "countryId"
            ],
            "type": "object",
            "properties": {
              "contactType": {
                "enum": [
                  1,
                  2,
                  4,
                  8,
                  1,
                  2,
                  4,
                  8,
                  1,
                  2,
                  4,
                  8
                ],
                "type": "integer",
                "description": "Типы адресов. В зависимости от типа адреса необходимо заполнять разные поля. <br>Это перечисление поддерживает битовые флаги, что позволяет указывать комбинацию нескольких значений для расчета различных типов доставки. \n                <br> 1 = Door - Конкретный адрес (дверь)<br>4 = PickupPoint - Точка выдачи конкретного поставщика <br> Пример: Указание нескольких значений позволяет комбинировать типы адресов, например: 5 указывает, что будут расчитаны варианты доставки как от/до двери, так и от/до точки выдачи.",
                "format": "int32"
              },
              "countryId": {
                "minLength": 1,
                "type": "string",
                "description": "Указывается двухбуквенный код страны в соответствии с ISO 3166-1 alpha-2 (https://ru.wikipedia.org/wiki/ISO_3166-1).<br>Обязателен, если не указаны координаты (latitude и longitude). Если указаны координаты, countryId может быть не заполнен."
              },
              "cityId": {
                "minLength": 1,
                "type": "string",
                "description": "Код города или населенного пункта\nОбязателен, если не указаны координаты (latitude и longitude). Если координаты указаны — параметр cityId может быть не заполнен.\n\nПриоритет выбора адреса:\n\n 1. Если указаны latitude и longitude — используются только координаты.\n 2. Если координаты не указаны — используются countryId, cityId, cityName и address.\n 3. Если по координатам не удалось распознать адрес — используются countryId, cityId, cityName и address.\n\nФормат значения зависит от страны. Для населенных пунктов:\n- внутри РФ - необходимо указывать код ФИАС (уровень 4 или 6) или КЛАДР,\n- в странах Беларуси, Казахстана и Узбекистана - Тип объекта и Идентификатор объекта в базе OpenStreetMap. Пример <i>relation:2465058</i> (https://ru.wikipedia.org/wiki/OpenStreetMap).\n- в остальных населенных пунктов за пределами РФ - Идентификатор объекта в базе GeoNames (https://ru.wikipedia.org/wiki/GeoNames).\nГород должен попадать в указанную в параметре country страну.\nЭтот параметр очень важен и определяет в том числе какому поставщику будет передан заказа. Также этот параметр\nвлияет на цену"
              },
              "cityName": {
                "type": "string",
                "description": "Название города (опционально).\nЛогика выбора:\n    1. Если указаны координаты — используются только координаты.\n    2. Если координаты не указаны, но указан CityId — используются CityId, а CityName игнорируется.\n    3. Если CityId не указан — выполняется поиск по CityName.\nДля точного определения, пожалуйста, используйте CityId или координаты.",
                "nullable": true
              },
              "postalCode": {
                "type": "string",
                "description": "Почтовый индекс населенного пункта. Не обязательный параметр",
                "nullable": true
              },
              "pickupPointId": {
                "type": "string",
                "description": "Идентификатор точки выдачи. Обязательно для ContactType = PickupPoint; игнорируется, если ContactType не равен PickupPoint",
                "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",
                "description": "Поставщик для PickupPointId. Обязательно для ContactType = PickupPoint; игнорируется, если ContactType не равен PickupPoint",
                "format": "int32",
                "nullable": true
              },
              "pickupPointType": {
                "$ref": "#/components/schemas/ApiPickupPointType"
              },
              "loadingWorks": {
                "type": "object",
                "properties": {
                  "floor": {
                    "type": "integer",
                    "description": "На каком этаже выполняются работы по спуску груза. По умолчанию 1"
                  },
                  "hasFreightLift": {
                    "type": "boolean",
                    "description": "Имеется ли грузовой лифт"
                  },
                  "loadersCount": {
                    "type": "integer",
                    "description": "Количество грузчиков. По умолчанию 1"
                  }
                },
                "additionalProperties": false,
                "description": "Погрузочные работы"
              },
              "transportRequirements": {
                "type": "object",
                "properties": {
                  "requirements": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/ApiTransportRequirementsType"
                    },
                    "description": "Перечень требований к транспортному средству. Необходимо указать массив требований, которые необходимы для транспорта. Список требований можно посмотреть: <a href=\"/api/reference/transportRequirementsType\">Справочник значений</a>"
                  }
                },
                "additionalProperties": false,
                "description": "Требования к транспорту для получателя"
              },
              "assemblyWorks": {
                "type": "object",
                "properties": {
                  "assemblersCount": {
                    "type": "integer",
                    "description": "Количество сборщиков. По умолчанию 1"
                  }
                },
                "additionalProperties": false,
                "description": "Работы по разборке груза"
              },
              "partialPayParameters": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PartialPaySurchargeRule"
                },
                "description": "Параметры услуги \"Частичный выкуп\"\nПри выкупе на сумму порога оплаты или ниже – соответствующая доплата за доставку.\nДля выкупа выше порога оплаты – доплата отсутствует.",
                "nullable": true
              },
              "address": {
                "type": "string",
                "description": "Адрес произвольной строкой. Адрес должен относиться к указанному в city городу и стране - эта проверка не выполняется, но если в поле адрес будет указан адрес из другого региона - доставка не гарантируется. Не обязателен, но может влиять на стоимость доставки\nОбязателен, когда contactType=Door и не указаны координаты. Если указаны координаты, Address может быть не заполнен.",
                "nullable": true
              }
            },
            "additionalProperties": false,
            "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": [
              "cityId",
              "countryId"
            ],
            "type": "object",
            "properties": {
              "contactType": {
                "enum": [
                  1,
                  2,
                  4,
                  8,
                  1,
                  2,
                  4,
                  8,
                  1,
                  2,
                  4,
                  8
                ],
                "type": "integer",
                "description": "Типы адресов. В зависимости от типа адреса необходимо заполнять разные поля. <br>Это перечисление поддерживает битовые флаги, что позволяет указывать комбинацию нескольких значений для расчета различных типов доставки. \n                <br> 1 = Door - Конкретный адрес (дверь)<br>4 = PickupPoint - Точка выдачи конкретного поставщика <br> Пример: Указание нескольких значений позволяет комбинировать типы адресов, например: 5 указывает, что будут расчитаны варианты доставки как от/до двери, так и от/до точки выдачи.",
                "format": "int32"
              },
              "countryId": {
                "minLength": 1,
                "type": "string",
                "description": "Указывается двухбуквенный код страны в соответствии с ISO 3166-1 alpha-2 (https://ru.wikipedia.org/wiki/ISO_3166-1).<br>Обязателен, если не указаны координаты (latitude и longitude). Если указаны координаты, countryId может быть не заполнен."
              },
              "cityId": {
                "minLength": 1,
                "type": "string",
                "description": "Код города или населенного пункта\nОбязателен, если не указаны координаты (latitude и longitude). Если координаты указаны — параметр cityId может быть не заполнен.\n\nПриоритет выбора адреса:\n\n 1. Если указаны latitude и longitude — используются только координаты.\n 2. Если координаты не указаны — используются countryId, cityId, cityName и address.\n 3. Если по координатам не удалось распознать адрес — используются countryId, cityId, cityName и address.\n\nФормат значения зависит от страны. Для населенных пунктов:\n- внутри РФ - необходимо указывать код ФИАС (уровень 4 или 6) или КЛАДР,\n- в странах Беларуси, Казахстана и Узбекистана - Тип объекта и Идентификатор объекта в базе OpenStreetMap. Пример <i>relation:2465058</i> (https://ru.wikipedia.org/wiki/OpenStreetMap).\n- в остальных населенных пунктов за пределами РФ - Идентификатор объекта в базе GeoNames (https://ru.wikipedia.org/wiki/GeoNames).\nГород должен попадать в указанную в параметре country страну.\nЭтот параметр очень важен и определяет в том числе какому поставщику будет передан заказа. Также этот параметр\nвлияет на цену"
              },
              "cityName": {
                "type": "string",
                "description": "Название города (опционально).\nЛогика выбора:\n    1. Если указаны координаты — используются только координаты.\n    2. Если координаты не указаны, но указан CityId — используются CityId, а CityName игнорируется.\n    3. Если CityId не указан — выполняется поиск по CityName.\nДля точного определения, пожалуйста, используйте CityId или координаты.",
                "nullable": true
              },
              "postalCode": {
                "type": "string",
                "description": "Почтовый индекс населенного пункта. Не обязательный параметр",
                "nullable": true
              },
              "pickupPointId": {
                "type": "string",
                "description": "Идентификатор точки выдачи. Обязательно для ContactType = PickupPoint; игнорируется, если ContactType не равен PickupPoint",
                "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",
                "description": "Поставщик для PickupPointId. Обязательно для ContactType = PickupPoint; игнорируется, если ContactType не равен PickupPoint",
                "format": "int32",
                "nullable": true
              },
              "pickupPointType": {
                "$ref": "#/components/schemas/ApiPickupPointType"
              },
              "loadingWorks": {
                "type": "object",
                "properties": {
                  "floor": {
                    "type": "integer",
                    "description": "На каком этаже выполняются работы по подъему груза. По умолчанию 1"
                  },
                  "hasFreightLift": {
                    "type": "boolean",
                    "description": "Имеется ли грузовой лифт"
                  },
                  "loadersCount": {
                    "type": "integer",
                    "description": "Количество грузчиков. По умолчанию 1"
                  }
                },
                "additionalProperties": false,
                "description": "Разгрузочные работы"
              },
              "transportRequirements": {
                "type": "object",
                "properties": {
                  "requirements": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/ApiTransportRequirementsType"
                    },
                    "description": "Перечень требований к транспортному средству. Необходимо указать массив требований, которые необходимы для транспорта. Список требований можно посмотреть: <a href=\"/api/reference/transportRequirementsType\">Справочник значений</a>"
                  }
                },
                "additionalProperties": false,
                "description": "Требования к транспорту для отправителя"
              },
              "assemblyWorks": {
                "type": "object",
                "properties": {
                  "assemblersCount": {
                    "type": "integer",
                    "description": "Количество сборщиков. По умолчанию 1"
                  }
                },
                "additionalProperties": false,
                "description": "Работы по сборке груза"
              },
              "partialPayParameters": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PartialPaySurchargeRule"
                },
                "description": "Параметры услуги \"Частичный выкуп\"\nПри выкупе на сумму порога оплаты или ниже – соответствующая доплата за доставку.\nДля выкупа выше порога оплаты – доплата отсутствует.",
                "nullable": true
              },
              "address": {
                "type": "string",
                "description": "Адрес произвольной строкой. Адрес должен относиться к указанному в city городу и стране - эта проверка не выполняется, но если в поле адрес будет указан адрес из другого региона - доставка не гарантируется. Не обязателен, но может влиять на стоимость доставки\nОбязателен, когда contactType=Door и не указаны координаты. Если указаны координаты, Address может быть не заполнен.",
                "nullable": true
              }
            },
            "additionalProperties": false,
            "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"
          },
          "deliveryInfo": {
            "$ref": "#/components/schemas/ReqDeliveryInfo"
          },
          "services": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Service"
            },
            "description": "Перечень дополнительных услуг (страховка, наложенный платеж, частичный выкуп и т.д.)",
            "nullable": true,
            "example": [
              {
                "code": "Insurance",
                "parameter": "1000"
              },
              {
                "code": "PrintReceipt",
                "parameter": "{\"PaymentType\":\"Prepayment\",\"FiscalizationTarget\":\"Products\"}"
              }
            ]
          },
          "receiverDeliveryCharge": {
            "type": "number",
            "description": "Дополнительный сбор за доставку с получателя. Используется для расчёта комиссии за наложенный платёж",
            "format": "double",
            "example": 100
          },
          "companyId": {
            "type": "integer",
            "description": "Идентификатор компании от которой создается заказ. Если значение не задано, то используется идентификатор компании,\nкоторой принадлежит ключ API.\nЧтобы получить идентификаторы для работы с вашими компаниями, пожалуйста, обратитесь на 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=\"/api/reference/asyncCalcStatuses\">Справочник значений</a>"
          },
          "issuedAt": {
            "type": "string",
            "description": "Дата и время создания задачи.",
            "format": "date-time",
            "example": "2024-10-18T10:00:00"
          },
          "expiredAt": {
            "type": "string",
            "description": "Дата и время, до которых результат расчета доступен для получения.\nПосле наступления этого времени результат будет удален.",
            "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 \n\nСписок услуг см. <a href=\"/api/reference/services\">справочник</a>",
            "example": "Insurance"
          },
          "status": {
            "$ref": "#/components/schemas/ApiServiceCalcStatus"
          }
        },
        "additionalProperties": false
      },
      "CallCourierPickupInfo": {
        "type": "object",
        "properties": {
          "autoChangeTakeDate": {
            "type": "boolean",
            "description": "Если true, то система будет пытаться автоматически поменять дату забора на ближайший доступный день, если на дату,\nзаданную в TakeDate, передача заказа с заданными VendorId и TariffId невозможна.\nПо умолчанию, true.\nПАРАМЕТР УСТАРЕЛ И БУДЕТ УДАЛЁН."
          },
          "takeDate": {
            "type": "string",
            "description": "Указывается дата забора груза в формате yyyy-MM-dd.\nПо умолчанию - текущая дата.\nНе все поставщики могут выполнять забор в выходные дни.\nТакже существуют ограничения на время размещения заказа с датой забора сегодня.\nБлижайшая доступная дата забора заказа возвращается в варианте доставки в takeDate.",
            "nullable": true,
            "example": "2020-03-31"
          },
          "timeFrom": {
            "type": "string",
            "description": "Указывается ограничение на время забора (начальное). Это ограничение носит рекомендательный характер и не всегда\nможет быть соблюдено.\nПо умолчанию указывается время забора 09:00.",
            "format": "date-span",
            "example": "12:00"
          },
          "timeTo": {
            "type": "string",
            "description": "Указывается ограничение на время забора (конечное). Это ограничение носит рекомендательный характер и не всегда\nможет быть соблюдено.\nПо умолчанию указывается время забора 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": "Таможенная стоимость отправления. Обязательно указывается, если страна получателя и отправителя не совпадают\n(отправление пересекает границу)",
            "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. \\\nОбязателен для передачи заказов некоторым поставщикам (Деловые Линии, Спецсвязь, 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": "Габарит длина в сантиметрах.\nГабаритные значения груза необходимы для расчета объемного веса. Они необязательны для документов, но если указан\nхоть один, остальные также должны быть заданы",
            "format": "double",
            "nullable": true,
            "example": 13.5
          },
          "h": {
            "type": "number",
            "description": "Габарит высота в сантиметрах.\nГабаритные значения груза необходимы для расчета объемного веса. Они необязательны для документов, но если указан\nхоть один, остальные также должны быть заданы",
            "format": "double",
            "nullable": true,
            "example": 10
          },
          "w": {
            "type": "number",
            "description": "Габарит ширина в сантиметрах.\nГабаритные значения груза необходимы для расчета объемного веса. Они необязательны для документов, но если указан\nхоть один, остальные также должны быть заданы",
            "format": "double",
            "nullable": true,
            "example": 20
          },
          "volumeWeight": {
            "type": "number",
            "description": "Объемный вес в кг. Если заданы габаритные размеры груза, то рассчитывается объемный вес. Этот параметр\nрассчитывается автоматически и НЕ ЗАПОЛНЯЕТСЯ при создании заказа.",
            "format": "double",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "Описание грузоместа или комментарии к грузоместу",
            "nullable": true,
            "example": "Ноутбук"
          },
          "volume": {
            "type": "number",
            "description": "Объем в кубических метрах для всего грузового места.\nЭтот параметр является необязательным. Если он указан, то его значение применяется ко всей посылке.\nЕсли указано значение для `Volume`, то в CargoItems может быть указан только один объект.",
            "format": "double",
            "nullable": true,
            "example": 6
          }
        },
        "additionalProperties": false,
        "description": "cargoItemModel - описание грузоместа"
      },
      "CargoProductModel": {
        "required": [
          "name",
          "productId",
          "qty"
        ],
        "type": "object",
        "properties": {
          "barcode": {
            "maxLength": 150,
            "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": "Сумма, которую оплачивает получатель при вручении.\nОбязателен для заполнения, если запрошена услуга \"Наложенный платеж\"",
            "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": "Дата забора (может не совпадать с переданной в запросе, если данный вариант тарифа уже нельзя сделать с забором на\nуказанную дату)",
            "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": "Теги. Перечень, который содержит дополнительные указания к вариантам доставки. Например, может быть указан способ транспортировки заказа Авиа /\nназемный транспорт",
            "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": "Обязательные поля на фронте \n\nПример: {\"productInfo\": [\"name\", \"article\", \"qty\"]}",
            "nullable": true
          },
          "optionIcons": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OptionIcon"
            },
            "description": "Иконки, которые необходимо отобразить на фронте",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Метаинформация и дополнительные характеристики варианта доставки.\n(Используется для отображения информации в 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": "Параметры услуг \"Погрузочные работы\" и \"Разгрузочные работы\"\nv24.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": "Массив идентификаторов тарифов поставщиков. Используется, как фильтр в расчете вариантов доставки. Если массив\nзадан, то в ответе будут варианты доставки только с указанными в этом массиве тарифами. Необязательный параметр",
            "nullable": true,
            "example": [
              "4",
              "1"
            ]
          },
          "vendorsIdFilter": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Массив идентификаторов поставщиков. Используется, как фильтр в расчете вариантов доставки. Если массив задан, то в\nответе будут варианты доставки только от указанных в этом массиве поставщиков. Необязательный параметр",
            "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": "Полная стоимость доставки в рублях. Включая все дополнительные сервисы, страховку и налоги и НДС (если\nприменимо)",
            "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": "Информация о расчете вариантов доставки"
      },
      "ReqDeliveryInfo": {
        "type": "object",
        "properties": {
          "reqDeliveryDate": {
            "type": "string",
            "description": "Желаемая дата доставки в формате yyyy-MM-dd. Если задан интервал, это его начало.\nПри указании даты в расчет добавляется услуга v24.OpenApi.Models.ApiV2.ApiServiceCode.SelectDeliveryDate (Выбор даты доставки)",
            "nullable": true,
            "example": "2020-03-31"
          },
          "reqDeliveryDateTo": {
            "type": "string",
            "description": "Конец интервала желаемой даты доставки в формате yyyy-MM-dd.\nЕсли не указан, считается равным v24.OpenApi.Models.ApiV2.DeliveryConditions.ReqDeliveryInfo.ReqDeliveryDate",
            "nullable": true,
            "example": "2020-04-02"
          },
          "reqDeliveryTimeFrom": {
            "type": "string",
            "description": "Желаемое начальное время доставки. Носит рекомендательный характер и может быть изменено\nв соответствии с выбранным тарифом поставщика",
            "format": "date-span",
            "nullable": true,
            "example": "12:00"
          },
          "reqDeliveryTimeTo": {
            "type": "string",
            "description": "Желаемое конечное время доставки. Носит рекомендательный характер и может быть изменено\nв соответствии с выбранным тарифом поставщика",
            "format": "date-span",
            "nullable": true,
            "example": "18:00"
          }
        },
        "additionalProperties": false,
        "description": "Сведения о желаемой дате и времени доставки заказа получателю"
      },
      "RoutePoint": {
        "required": [
          "cityId",
          "countryId"
        ],
        "type": "object",
        "properties": {
          "contactType": {
            "$ref": "#/components/schemas/ApiContactTypes"
          },
          "countryId": {
            "minLength": 1,
            "type": "string",
            "description": "Указывается двухбуквенный код страны в соответствии с ISO 3166-1 alpha-2 (https://ru.wikipedia.org/wiki/ISO_3166-1).<br>Обязателен, если не указаны координаты (latitude и longitude). Если указаны координаты, countryId может быть не заполнен."
          },
          "cityId": {
            "minLength": 1,
            "type": "string",
            "description": "Код города или населенного пункта\nОбязателен, если не указаны координаты (latitude и longitude). Если координаты указаны — параметр cityId может быть не заполнен.\n\nПриоритет выбора адреса:\n\n 1. Если указаны latitude и longitude — используются только координаты.\n 2. Если координаты не указаны — используются countryId, cityId, cityName и address.\n 3. Если по координатам не удалось распознать адрес — используются countryId, cityId, cityName и address.\n\nФормат значения зависит от страны. Для населенных пунктов:\n- внутри РФ - необходимо указывать код ФИАС (уровень 4 или 6) или КЛАДР,\n- в странах Беларуси, Казахстана и Узбекистана - Тип объекта и Идентификатор объекта в базе OpenStreetMap. Пример <i>relation:2465058</i> (https://ru.wikipedia.org/wiki/OpenStreetMap).\n- в остальных населенных пунктов за пределами РФ - Идентификатор объекта в базе GeoNames (https://ru.wikipedia.org/wiki/GeoNames).\nГород должен попадать в указанную в параметре country страну.\nЭтот параметр очень важен и определяет в том числе какому поставщику будет передан заказа. Также этот параметр\nвлияет на цену"
          },
          "cityName": {
            "type": "string",
            "description": "Название города (опционально).\nЛогика выбора:\n    1. Если указаны координаты — используются только координаты.\n    2. Если координаты не указаны, но указан CityId — используются CityId, а CityName игнорируется.\n    3. Если CityId не указан — выполняется поиск по CityName.\nДля точного определения, пожалуйста, используйте CityId или координаты.",
            "nullable": true
          },
          "postalCode": {
            "type": "string",
            "description": "Почтовый индекс населенного пункта. Не обязательный параметр",
            "nullable": true
          },
          "pickupPointId": {
            "type": "string",
            "description": "Идентификатор точки выдачи. Обязательно для ContactType = PickupPoint; игнорируется, если ContactType не равен PickupPoint",
            "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",
            "description": "Поставщик для PickupPointId. Обязательно для ContactType = PickupPoint; игнорируется, если ContactType не равен PickupPoint",
            "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": "Параметры услуги \"Частичный выкуп\"\nПри выкупе на сумму порога оплаты или ниже – соответствующая доплата за доставку.\nДля выкупа выше порога оплаты – доплата отсутствует.",
            "nullable": true
          },
          "address": {
            "type": "string",
            "description": "Адрес произвольной строкой. Адрес должен относиться к указанному в city городу и стране - эта проверка не выполняется, но если в поле адрес будет указан адрес из другого региона - доставка не гарантируется. Не обязателен, но может влиять на стоимость доставки\nОбязателен, когда contactType=Door и не указаны координаты. Если указаны координаты, Address может быть не заполнен.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "RoutePoint -  Описание точки маршрута"
      },
      "Service": {
        "required": [
          "code"
        ],
        "type": "object",
        "properties": {
          "code": {
            "minLength": 1,
            "type": "string",
            "description": "Наименование услуги. Например: Insurance \n\nСписок услуг см. <a href=\"/api/reference/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": "Идентификатор данного вида доставки у указанного поставщика. \\\nПоля 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": "Тип договора с поставщиком \\\n0 = Versta - Договор vertsa24 \\\n1 = 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"
          },
          "vendorKey": {
            "type": "string",
            "description": "Ключ поставщика - сокращенное название по которому его можно будет найти в OpenAPI",
            "nullable": true,
            "example": "CDEK"
          }
        },
        "additionalProperties": false,
        "description": "Информация о поставщике."
      }
    }
  },
  "tags": [
    {
      "name": "Auth"
    },
    {
      "name": "Calc"
    }
  ],
  "servers": [
    {
      "url": "https://api.versta24.ru"
    }
  ]
}
