---
openapi: 3.0.3
components:
  schemas:
    AdminAck:
      type: object
      properties:
        status:
          type: string
    ApiError:
      description: Детали ошибки для неуспешных операций
      type: object
      properties:
        message:
          description: Сообщение об ошибке
          type: string
          example: Не указано обязательное поле «paymentType»
          nullable: true
        code:
          format: int32
          description: HTTP-код ошибки (дублирует HTTP status)
          type: integer
          example: 400
          nullable: true
        errorCode:
          description: Machine-readable код ошибки. Фронт switch'ится на это значение
            для UI-логики.
          enum:
          - missing_field
          - invalid_format
          - invalid_uuid
          - limit_exceeded
          - cart_full
          - cart_empty
          - item_not_found
          - promo_invalid
          - payment_type_not_allowed
          - captcha_required
          - captcha_invalid
          - device_id_required
          - rate_limit_phone
          - rate_limit_ip
          - rate_limit_pin_attempt
          - antispam_blocked
          - device_session_revoked
          - token_expired
          - csrf_invalid
          - upstream_timeout
          - upstream_down
          type: string
          example: cart_full
          nullable: true
        details:
          description: "Структурный payload для фронта (siteKey, retryAfter, maxItems,\
            \ ...). Ключи зависят от errorCode — см. KDoc ErrorCodes."
          type: object
          additionalProperties: {}
          example:
            maxItems: 60
            currentItems: 60
          nullable: true
        success:
          description: Всегда false для ошибок
          type: boolean
          example: false
        stacktrace:
          description: Stacktrace (только в dev/test environment)
          type: array
          items:
            type: string
          nullable: true
    ApiResponse:
      description: Ответ на операции с корзиной
      type: object
      properties:
        data: {}
        error:
          allOf:
          - $ref: "#/components/schemas/ApiError"
          nullable: true
        message:
          type: string
          nullable: true
        success:
          type: boolean
    ApiResponse1:
      description: Универсальная структура ответа API
      type: object
      properties:
        data:
          enum:
          - null
        error:
          allOf:
          - $ref: "#/components/schemas/ApiError"
          nullable: true
        message:
          type: string
          nullable: true
        success:
          description: Флаг успешности операции
          type: boolean
          example: true
    AppVersionResponse:
      required:
      - googlePlay
      - appStore
      type: object
      properties:
        googlePlay:
          $ref: "#/components/schemas/StoreInfo"
        appStore:
          $ref: "#/components/schemas/StoreInfo"
    AuthApiResponse:
      description: Ответ на авторизацию
      required:
      - success
      type: object
      properties:
        success:
          type: boolean
        data:
          allOf:
          - $ref: "#/components/schemas/SignInResponse"
          nullable: true
        message:
          type: string
          nullable: true
        error:
          allOf:
          - $ref: "#/components/schemas/ApiError"
          nullable: true
    AuthError:
      description: Ответ на операции с корзиной
      type: object
      properties:
        success:
          type: boolean
        error:
          allOf:
          - $ref: "#/components/schemas/ApiError"
          nullable: true
    CaptchaResponse:
      type: object
      properties:
        success:
          type: boolean
        data:
          allOf:
          - $ref: "#/components/schemas/GQCaptcha"
          nullable: true
    Cart:
      description: Модель корзины покупок
      required:
      - items
      type: object
      properties:
        owner:
          type: string
          nullable: true
        session:
          type: string
          nullable: true
        items:
          type: object
          additionalProperties:
            type: array
            items:
              $ref: "#/components/schemas/CartItem"
        promoProfit:
          type: object
          additionalProperties:
            $ref: "#/components/schemas/CartDiscount"
        promoProfitSelected:
          type: object
          additionalProperties:
            $ref: "#/components/schemas/CartDiscount"
        context:
          type: object
          additionalProperties:
            type: string
        status:
          $ref: "#/components/schemas/CartStatus"
        version:
          format: int32
          type: integer
        created:
          $ref: "#/components/schemas/Instant"
        updated:
          $ref: "#/components/schemas/Instant"
        totalBaseSelected:
          type: number
        totalSocSelected:
          type: number
        totalSelected:
          type: number
        totalBase:
          type: number
        totalSoc:
          type: number
        totalSocWithDelivery:
          type: number
        totalWithDelivery:
          type: number
        deliveryPrice:
          type: number
        total:
          type: number
        qty:
          type: number
        qtySelected:
          type: number
        availablePromo:
          type: array
          items:
            $ref: "#/components/schemas/CartDiscount"
        paymentLink:
          type: array
          items:
            $ref: "#/components/schemas/OBPaymentLink"
          nullable: true
        deliveryConfig:
          allOf:
          - $ref: "#/components/schemas/DeliveryConfig"
          nullable: true
        totalAccrualBonuses:
          type: number
        availableBonuses:
          type: number
        spendBonuses:
          type: number
    CartDeliveryInterval:
      required:
      - block
      - sku
      - id
      type: object
      properties:
        block:
          type: string
        sku:
          type: string
        id:
          type: string
    CartDeviceView:
      required:
      - id
      - deviceId
      - platform
      - locale
      - active
      - createdAtIso
      - updatedAtIso
      - current
      type: object
      properties:
        id:
          type: string
        deviceId:
          type: string
        platform:
          $ref: "#/components/schemas/NotificationPlatform"
        deviceName:
          type: string
          nullable: true
        locale:
          type: string
        active:
          type: boolean
        createdAtIso:
          type: string
        updatedAtIso:
          type: string
        lastSeenAtIso:
          type: string
          nullable: true
        lastUserAgent:
          type: string
          nullable: true
        lastIp:
          type: string
          nullable: true
        lastCountry:
          type: string
          nullable: true
        lastCity:
          type: string
          nullable: true
        appVersion:
          type: string
          nullable: true
        appBuild:
          format: int32
          type: integer
          nullable: true
        revokedAtIso:
          type: string
          nullable: true
        revokedReason:
          type: string
          nullable: true
        current:
          type: boolean
    CartDiscount:
      required:
      - title
      - applyType
      - value
      - type
      type: object
      properties:
        title:
          type: string
        applyType:
          type: string
        value:
          type: number
        type:
          type: string
        id:
          type: string
          nullable: true
        secretCode:
          type: string
          nullable: true
    CartItem:
      description: Модель элемента корзины
      required:
      - sku
      - partQty
      type: object
      properties:
        ts:
          type: string
        sku:
          type: string
        partQty:
          type: number
        parts:
          type: array
          items:
            $ref: "#/components/schemas/CartItemPart"
        prcAvg:
          type: number
        prcId:
          type: string
          nullable: true
        totalBase:
          type: number
        totalSoc:
          type: number
        total:
          type: number
        selected:
          type: boolean
        priceInfo:
          allOf:
          - $ref: "#/components/schemas/PricesInfoDTO"
          nullable: true
        hash:
          type: string
          nullable: true
        availablePromos:
          type: array
          items:
            type: string
        appliedPromos:
          type: object
          additionalProperties:
            type: number
        favorite:
          type: boolean
        block:
          type: string
          nullable: true
        available:
          type: boolean
        deliveryIndex:
          type: string
          nullable: true
        accrualBonuses:
          type: number
        availableQty:
          format: int64
          type: integer
    CartItemPart:
      description: Модель части элемента корзины
      required:
      - prc
      - qty
      - total
      type: object
      properties:
        prc:
          type: number
        qty:
          type: number
        total:
          type: number
        applied:
          type: object
          additionalProperties:
            type: number
        accrual:
          type: number
    CartPaymentMethod:
      required:
      - providerId
      - title
      - paymentType
      - position
      type: object
      properties:
        providerId:
          format: int32
          type: integer
        title:
          type: string
        paymentType:
          $ref: "#/components/schemas/PaymentType"
        position:
          format: int32
          type: integer
        svg:
          type: string
          nullable: true
        png:
          type: string
          nullable: true
    CartRequest:
      description: Запрос для выполнения операций с корзиной
      type: object
      properties:
        owner:
          type: string
          nullable: true
        session:
          type: string
          nullable: true
        productId:
          type: string
          nullable: true
        productIds:
          type: array
          items:
            type: string
          nullable: true
        quantity:
          format: int32
          type: integer
          nullable: true
        promoCode:
          type: string
          nullable: true
        spendBonuses:
          type: number
          nullable: true
        deliveryDay:
          type: string
          nullable: true
        deliveryTime:
          type: string
          nullable: true
        deliveryType:
          allOf:
          - $ref: "#/components/schemas/DeliveryType"
          nullable: true
        deliveryAddress:
          type: string
          nullable: true
        deliveryPhone:
          type: string
          nullable: true
        deliveryUserName:
          type: string
          nullable: true
        deliveryComment:
          type: string
          nullable: true
        paymentType:
          allOf:
          - $ref: "#/components/schemas/PaymentType"
          nullable: true
        warehouse:
          type: string
          nullable: true
        intervals:
          type: array
          items:
            $ref: "#/components/schemas/CartDeliveryInterval"
          nullable: true
        preview:
          type: boolean
          nullable: true
        requestId:
          type: string
          nullable: true
        csrfToken:
          type: string
          nullable: true
        authorized:
          type: boolean
    CartResponse:
      description: Ответ на операции с корзиной
      type: object
      properties:
        userId:
          type: string
          nullable: true
        sessionId:
          type: string
          nullable: true
        data:
          allOf:
          - $ref: "#/components/schemas/Cart"
          nullable: true
        message:
          type: string
          nullable: true
        error:
          allOf:
          - $ref: "#/components/schemas/ApiError"
          nullable: true
        success:
          type: boolean
    CartStatus:
      description: Статусы корзины
      enum:
      - ACTIVE
      - LOCK
      - ARCHIVED
      - ORDER_CREATED
      - ORDER_AWAITING_PAYMENT
      - ORDER_CANCELED
      type: string
    CommonIntervalsResultWithModels:
      description: Результат поиска общих интервалов — возвращает модели
      required:
      - all
      - first
      - last
      type: object
      properties:
        all:
          type: array
          items:
            $ref: "#/components/schemas/DeliveryInterval"
        first:
          allOf:
          - $ref: "#/components/schemas/DeliveryInterval"
          nullable: true
        last:
          allOf:
          - $ref: "#/components/schemas/DeliveryInterval"
          nullable: true
    ConfigDeliveryProvider:
      description: Информация о провайдере доставки
      required:
      - name
      type: object
      properties:
        name:
          type: string
        code:
          type: string
          nullable: true
        days:
          format: int32
          type: integer
          nullable: true
        params:
          type: object
          additionalProperties:
            type: string
    CustomerAddressData:
      type: object
      properties:
        daData:
          allOf:
          - $ref: "#/components/schemas/DaDataAddressDto"
          nullable: true
        kladrId:
          type: string
          nullable: true
        floor:
          type: string
          nullable: true
        entrance:
          type: string
          nullable: true
        deliveryComment:
          type: string
          nullable: true
        deliveryUserName:
          type: string
          nullable: true
        deliveryPhone:
          type: string
          nullable: true
        city:
          type: string
        street:
          type: string
        house:
          format: int64
          type: integer
          nullable: true
        building:
          format: int64
          type: integer
          nullable: true
        apartment:
          format: int64
          type: integer
          nullable: true
        addressString:
          type: string
    CustomerChildrenListResponse:
      required:
      - data
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/GQChildren"
          nullable: true
        success:
          type: boolean
        message:
          type: string
          nullable: true
        error:
          allOf:
          - $ref: "#/components/schemas/ApiError"
          nullable: true
    CustomerContact:
      required:
      - name
      - phoneNumber
      type: object
      properties:
        contactKey:
          type: string
          nullable: true
        name:
          type: string
        phoneNumber:
          type: string
    CustomerFavoritesResponse:
      type: object
      properties:
        data:
          type: array
          items:
            type: string
          nullable: true
        message:
          type: string
          nullable: true
        error:
          allOf:
          - $ref: "#/components/schemas/ApiError"
          nullable: true
        success:
          type: boolean
    CustomerOrdersResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/GQOrderList"
          nullable: true
        message:
          type: string
          nullable: true
        error:
          allOf:
          - $ref: "#/components/schemas/ApiError"
          nullable: true
        success:
          type: boolean
    CustomerOrdersTotalCountResponse:
      required:
      - data
      type: object
      properties:
        data:
          allOf:
          - $ref: "#/components/schemas/GQOrdersTotalCount"
          nullable: true
        message:
          type: string
          nullable: true
        error:
          allOf:
          - $ref: "#/components/schemas/ApiError"
          nullable: true
        success:
          type: boolean
    CustomerProfileResponse:
      required:
      - data
      type: object
      properties:
        data:
          allOf:
          - $ref: "#/components/schemas/ProfileCacheData"
          nullable: true
        message:
          type: string
          nullable: true
        error:
          allOf:
          - $ref: "#/components/schemas/ApiError"
          nullable: true
        success:
          type: boolean
    DaDataAddressDto:
      type: object
      properties:
        postal_code:
          type: string
          nullable: true
        country:
          type: string
          nullable: true
        country_iso_code:
          type: string
          nullable: true
        federal_district:
          type: string
          nullable: true
        region_fias_id:
          type: string
          nullable: true
        region_kladr_id:
          type: string
          nullable: true
        region_iso_code:
          type: string
          nullable: true
        region_with_type:
          type: string
          nullable: true
        region_type:
          type: string
          nullable: true
        region_type_full:
          type: string
          nullable: true
        region:
          type: string
          nullable: true
        area_fias_id:
          type: string
          nullable: true
        area_kladr_id:
          type: string
          nullable: true
        area_with_type:
          type: string
          nullable: true
        area_type:
          type: string
          nullable: true
        area_type_full:
          type: string
          nullable: true
        area:
          type: string
          nullable: true
        city_fias_id:
          type: string
          nullable: true
        city_kladr_id:
          type: string
          nullable: true
        city_with_type:
          type: string
          nullable: true
        city_type:
          type: string
          nullable: true
        city_type_full:
          type: string
          nullable: true
        city:
          type: string
          nullable: true
        city_area:
          type: string
          nullable: true
        city_district_fias_id:
          type: string
          nullable: true
        city_district_kladr_id:
          type: string
          nullable: true
        city_district_with_type:
          type: string
          nullable: true
        city_district_type:
          type: string
          nullable: true
        city_district_type_full:
          type: string
          nullable: true
        city_district:
          type: string
          nullable: true
        settlement_fias_id:
          type: string
          nullable: true
        settlement_kladr_id:
          type: string
          nullable: true
        settlement_with_type:
          type: string
          nullable: true
        settlement_type:
          type: string
          nullable: true
        settlement_type_full:
          type: string
          nullable: true
        settlement:
          type: string
          nullable: true
        street_fias_id:
          type: string
          nullable: true
        street_kladr_id:
          type: string
          nullable: true
        street_with_type:
          type: string
          nullable: true
        street_type:
          type: string
          nullable: true
        street_type_full:
          type: string
          nullable: true
        street:
          type: string
          nullable: true
        stead_fias_id:
          type: string
          nullable: true
        stead_cadnum:
          type: string
          nullable: true
        stead_type:
          type: string
          nullable: true
        stead_type_full:
          type: string
          nullable: true
        stead:
          type: string
          nullable: true
        house_fias_id:
          type: string
          nullable: true
        house_kladr_id:
          type: string
          nullable: true
        house_cadnum:
          type: string
          nullable: true
        house_flat_count:
          format: int32
          type: integer
          nullable: true
        house_type:
          type: string
          nullable: true
        house_type_full:
          type: string
          nullable: true
        house:
          type: string
          nullable: true
        block_type:
          type: string
          nullable: true
        block_type_full:
          type: string
          nullable: true
        block:
          type: string
          nullable: true
        entrance:
          type: string
          nullable: true
        floor:
          type: string
          nullable: true
        flat_fias_id:
          type: string
          nullable: true
        flat_cadnum:
          type: string
          nullable: true
        flat_type:
          type: string
          nullable: true
        flat_type_full:
          type: string
          nullable: true
        flat:
          type: string
          nullable: true
        flat_area:
          format: double
          type: number
          nullable: true
        square_meter_price:
          format: double
          type: number
          nullable: true
        flat_price:
          format: double
          type: number
          nullable: true
        room_fias_id:
          type: string
          nullable: true
        room_cadnum:
          type: string
          nullable: true
        room_type:
          type: string
          nullable: true
        room_type_full:
          type: string
          nullable: true
        room:
          type: string
          nullable: true
        postal_box:
          type: string
          nullable: true
        fias_id:
          type: string
          nullable: true
        fias_code:
          type: string
          nullable: true
        fias_level:
          type: string
          nullable: true
        fias_actuality_state:
          type: string
          nullable: true
        kladr_id:
          type: string
          nullable: true
        geoname_id:
          type: string
          nullable: true
        capital_marker:
          type: string
          nullable: true
        okato:
          type: string
          nullable: true
        oktmo:
          type: string
          nullable: true
        tax_office:
          type: string
          nullable: true
        tax_office_legal:
          type: string
          nullable: true
        timezone:
          type: string
          nullable: true
        geo_lat:
          format: double
          type: number
          nullable: true
        geo_lon:
          format: double
          type: number
          nullable: true
        beltway_hit:
          type: string
          nullable: true
        beltway_distance:
          format: double
          type: number
          nullable: true
        metro:
          type: array
          items:
            $ref: "#/components/schemas/DaDataMetroStationDto"
          nullable: true
        qc_geo:
          type: string
          nullable: true
        qc_complete:
          type: string
          nullable: true
        qc_house:
          type: string
          nullable: true
        history_values:
          type: array
          items:
            type: string
          nullable: true
        unparsed_parts:
          type: string
          nullable: true
        source:
          type: string
          nullable: true
        qc:
          type: string
          nullable: true
    DaDataMetroStationDto:
      type: object
      properties:
        name:
          type: string
          nullable: true
        line:
          type: string
          nullable: true
        distance:
          format: double
          type: number
          nullable: true
    DeactivateCustomerDeviceRequest:
      type: object
      properties:
        reason:
          type: string
          nullable: true
    DebugStatus:
      required:
      - flags
      type: object
      properties:
        flags:
          type: object
          additionalProperties:
            type: boolean
    DeliveryConfig:
      description: Конфигурация доставки для корзины
      required:
      - success
      - hash
      type: object
      properties:
        success:
          type: boolean
        message:
          type: string
          nullable: true
        providers:
          type: object
          additionalProperties:
            $ref: "#/components/schemas/ConfigDeliveryProvider"
        intervals:
          type: object
          additionalProperties:
            $ref: "#/components/schemas/DeliveryInterval"
        slots:
          type: object
          additionalProperties:
            uniqueItems: true
            type: array
            items:
              type: string
        limitExpr:
          type: number
        limitSPBLO:
          type: number
        limitReg:
          type: number
        hash:
          type: string
        sources:
          allOf:
          - $ref: "#/components/schemas/JsonNode"
          nullable: true
    DeliveryInterval:
      description: Интервал доставки
      required:
      - providerId
      - date
      - start
      - end
      - price
      type: object
      properties:
        providerId:
          type: string
        date:
          type: string
        start:
          format: int32
          type: integer
        end:
          format: int32
          type: integer
        price:
          type: number
    DeliveryProvider:
      required:
      - id
      - name
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        svg:
          type: string
          nullable: true
        png:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
    DeliveryType:
      description: Типы доставки
      enum:
      - InPlace
      - Out
      type: string
    DeviceRegisteredResponse:
      required:
      - success
      type: object
      properties:
        success:
          type: boolean
        deviceId:
          type: string
          nullable: true
        active:
          type: boolean
          nullable: true
        message:
          type: string
          nullable: true
    GQCaptcha:
      type: object
      properties:
        status:
          type: string
          nullable: true
        captcha_id:
          type: string
          nullable: true
        captcha_data:
          type: string
          nullable: true
        msg:
          type: string
          nullable: true
    GQChildren:
      type: object
      properties:
        id:
          format: int32
          type: integer
          nullable: true
        children_id:
          format: int32
          type: integer
          nullable: true
        name:
          type: string
          nullable: true
        surname:
          type: string
          nullable: true
        patronymic:
          type: string
          nullable: true
        gender:
          type: string
          nullable: true
        birth_date:
          type: string
          nullable: true
        status:
          format: int32
          type: integer
          nullable: true
    GQOrderList:
      type: object
      properties:
        order_id:
          format: int32
          type: integer
          nullable: true
        order_code:
          type: string
          nullable: true
        order_code_tr:
          type: string
          nullable: true
        create_ts:
          format: int32
          type: integer
          nullable: true
        update_ts:
          format: int32
          type: integer
          nullable: true
        total_amount:
          format: float
          type: number
          nullable: true
        delivery_amount:
          format: float
          type: number
          nullable: true
        points_spent:
          format: float
          type: number
          nullable: true
        points_obtained:
          format: float
          type: number
          nullable: true
        coupon:
          type: string
          nullable: true
        delivery_address:
          type: string
          nullable: true
        delivery_date:
          type: string
          nullable: true
        delivery_service:
          type: string
          nullable: true
        delivery_interval_courier:
          type: string
          nullable: true
        last_storage_day:
          type: string
          nullable: true
        online_payment:
          type: string
          nullable: true
        order_status:
          type: string
          nullable: true
        order_status_color:
          type: string
          nullable: true
        order_payment_method:
          type: string
          nullable: true
        order_payment_status:
          type: string
          nullable: true
        order_logistic_status:
          type: string
          nullable: true
        point_id:
          format: int32
          type: integer
          nullable: true
        order_cancelable:
          type: boolean
        pay_available:
          type: boolean
        order_pass_code:
          type: string
          nullable: true
        products:
          type: array
          items:
            $ref: "#/components/schemas/GQOrderProduct"
          nullable: true
    GQOrderProduct:
      type: object
      properties:
        product_id:
          format: int32
          type: integer
          nullable: true
        title:
          type: string
          nullable: true
        price:
          format: float
          type: number
          nullable: true
        quantity:
          format: int32
          type: integer
          nullable: true
        description:
          type: string
          nullable: true
        vendor_code:
          type: string
          nullable: true
        brand:
          type: string
          nullable: true
        country:
          type: string
          nullable: true
        weight:
          format: float
          type: number
          nullable: true
        height:
          format: float
          type: number
          nullable: true
        width:
          format: float
          type: number
          nullable: true
        length:
          format: float
          type: number
          nullable: true
        image:
          type: string
          nullable: true
        image_min:
          type: string
          nullable: true
        social_card:
          format: int32
          type: integer
          nullable: true
        price_type:
          type: string
          nullable: true
    GQOrdersTotalCount:
      type: object
      properties:
        active:
          format: int32
          type: integer
        archived:
          format: int32
          type: integer
        total:
          format: int32
          type: integer
    GQPaymentMethod:
      type: object
      properties:
        provider_id:
          format: int32
          type: integer
          nullable: true
        title:
          type: string
          nullable: true
        logo:
          type: string
          nullable: true
    GQUser:
      type: object
      properties:
        id:
          format: int32
          type: integer
          nullable: true
        email:
          type: string
          nullable: true
        phone:
          type: string
          nullable: true
        name:
          type: string
          nullable: true
        surname:
          type: string
          nullable: true
        patronymic:
          type: string
          nullable: true
        birth_date:
          type: string
          nullable: true
        gender:
          type: string
          nullable: true
        balls:
          format: float
          type: number
          nullable: true
        subsc_pharmacy:
          type: boolean
          nullable: true
        subsc_service:
          type: boolean
          nullable: true
        subsc_childhood:
          type: boolean
          nullable: true
        status:
          format: int32
          type: integer
          nullable: true
        create_ts:
          format: int32
          type: integer
          nullable: true
        update_ts:
          format: int32
          type: integer
          nullable: true
    Instant:
      format: date-time
      type: string
      example: 2022-03-10T16:15:50Z
    IntervalIndexesResult:
      description: Результат поиска общих интервалов — возвращает ключи
      required:
      - all
      - first
      - last
      type: object
      properties:
        all:
          type: array
          items:
            type: string
        first:
          type: string
          nullable: true
        last:
          type: string
          nullable: true
    JsonNode:
      type: object
      properties:
        empty:
          type: boolean
        valueNode:
          type: boolean
        containerNode:
          type: boolean
        missingNode:
          type: boolean
        array:
          type: boolean
        object:
          type: boolean
        nodeType:
          $ref: "#/components/schemas/JsonNodeType"
        pojo:
          type: boolean
        number:
          type: boolean
        integralNumber:
          type: boolean
        floatingPointNumber:
          type: boolean
        short:
          type: boolean
        int:
          type: boolean
        long:
          type: boolean
        float:
          type: boolean
        double:
          type: boolean
        bigDecimal:
          type: boolean
        bigInteger:
          type: boolean
        textual:
          type: boolean
        boolean:
          type: boolean
        "null":
          type: boolean
        binary:
          type: boolean
    JsonNodeType:
      enum:
      - ARRAY
      - BINARY
      - BOOLEAN
      - MISSING
      - "NULL"
      - NUMBER
      - OBJECT
      - POJO
      - STRING
      type: string
    ListCustomerDevicesResponse:
      required:
      - devices
      type: object
      properties:
        devices:
          type: array
          items:
            $ref: "#/components/schemas/CartDeviceView"
    LocalDate:
      format: date
      type: string
      example: 2022-03-10
    LocalDateTime:
      format: date-time
      type: string
      example: 2022-03-10T12:15:50
    LocationsResponse:
      type: object
      properties:
        success:
          type: boolean
        data:
          type: array
          items:
            $ref: "#/components/schemas/OBStore"
          nullable: true
    NotificationPlatform:
      enum:
      - ANDROID
      - IOS
      - WEB
      type: string
    OBPaymentLink:
      type: object
      properties:
        orderIds:
          type: string
          nullable: true
        paymentLink:
          type: string
          nullable: true
        expireDate:
          allOf:
          - $ref: "#/components/schemas/LocalDateTime"
          nullable: true
    OBStore:
      required:
      - point_id
      - name
      - address
      - city
      - coords
      type: object
      properties:
        point_id:
          format: int64
          type: integer
        name:
          type: string
        address:
          type: string
        city:
          type: string
        coords:
          type: string
        phone:
          type: string
          nullable: true
        cell_phone:
          type: string
          nullable: true
        working_hours:
          type: string
          nullable: true
        metro:
          type: string
          nullable: true
        metro_line_color:
          type: string
          nullable: true
        storage_id:
          format: int64
          type: integer
          nullable: true
        service_code:
          type: string
          nullable: true
        service_name:
          type: string
          nullable: true
        cost_of_delivery:
          format: int64
          type: integer
          nullable: true
        free_shipping:
          format: int64
          type: integer
          nullable: true
        max_quantity:
          format: int64
          type: integer
          nullable: true
        shelf_life:
          format: int64
          type: integer
          nullable: true
        add_phone:
          format: int64
          type: integer
          nullable: true
        dates:
          type: array
          items:
            type: string
        allowPaymentTypes:
          type: array
          items:
            type: string
        id1c:
          type: string
          nullable: true
    PaymentMethodsResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/GQPaymentMethod"
          nullable: true
        message:
          type: string
          nullable: true
        error:
          allOf:
          - $ref: "#/components/schemas/ApiError"
          nullable: true
        success:
          type: boolean
    PaymentType:
      description: Типы оплаты
      enum:
      - InPlace
      - Sbp
      - Debit
      - Social
      type: string
    PricesInfoDTO:
      required:
      - base
      - sku
      type: object
      properties:
        base:
          type: number
        second:
          type: number
        social:
          type: number
        sku:
          type: string
        warehouse:
          type: string
          nullable: true
        group:
          type: string
          nullable: true
    ProfileCacheData:
      required:
      - userId
      type: object
      properties:
        userId:
          type: string
        version:
          format: int64
          type: integer
        warehouseId:
          type: string
          nullable: true
        defaultAddressKey:
          type: string
          nullable: true
        defaultContactKey:
          type: string
          nullable: true
        addresses:
          type: object
          additionalProperties:
            $ref: "#/components/schemas/CustomerAddressData"
        contacts:
          type: object
          additionalProperties:
            $ref: "#/components/schemas/CustomerContact"
        favorites:
          type: array
          items:
            type: string
        deliveryType:
          $ref: "#/components/schemas/DeliveryType"
        warehouseObject:
          allOf:
          - $ref: "#/components/schemas/OBStore"
          nullable: true
        monolithProfile:
          allOf:
          - $ref: "#/components/schemas/GQUser"
          nullable: true
        availableBonuses:
          type: number
    RegisterDeviceBody:
      required:
      - fcmToken
      - platform
      type: object
      properties:
        fcmToken:
          type: string
        platform:
          type: string
        locale:
          type: string
          nullable: true
    RegisteredUUIDResponse:
      required:
      - data
      type: object
      properties:
        data:
          type: string
          nullable: true
        message:
          type: string
          nullable: true
        success:
          type: boolean
        error:
          allOf:
          - $ref: "#/components/schemas/ApiError"
          nullable: true
    SetVersionRequest:
      required:
      - store
      - versionName
      type: object
      properties:
        store:
          type: string
        versionName:
          type: string
        versionCode:
          format: int64
          type: integer
          nullable: true
    SignInConfirmRequest:
      required:
      - pinCode
      type: object
      properties:
        pinCode:
          format: int32
          type: integer
        phone:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
        csrfToken:
          type: string
          nullable: true
        session:
          type: string
          nullable: true
        simple:
          type: boolean
    SignInRequest:
      description: Данные для входа клиента
      type: object
      properties:
        email:
          type: string
          nullable: true
        phone:
          type: string
          nullable: true
        password:
          type: string
          nullable: true
        captchaId:
          type: string
          nullable: true
        captchaCode:
          type: string
          nullable: true
        csrfToken:
          type: string
          nullable: true
        captchaToken:
          type: string
          nullable: true
    SignInResponse:
      description: Ответ при успешной авторизации клиента
      required:
      - awaitPinCode
      type: object
      properties:
        awaitPinCode:
          type: boolean
        token:
          allOf:
          - $ref: "#/components/schemas/Token"
          nullable: true
        csrfToken:
          type: string
          nullable: true
        userId:
          type: string
          nullable: true
        sessionId:
          type: string
          nullable: true
        awaitPinCodeTimeOut:
          format: int64
          type: integer
        requestAt:
          $ref: "#/components/schemas/LocalDateTime"
    SignUpConfirmRequest:
      required:
      - pinCode
      type: object
      properties:
        pinCode:
          format: int32
          type: integer
        phone:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
        csrfToken:
          type: string
          nullable: true
        session:
          type: string
          nullable: true
    SignUpRequest:
      description: Данные для регистрации клиента
      type: object
      properties:
        email:
          type: string
          nullable: true
        name:
          type: string
          nullable: true
        phone:
          type: string
          nullable: true
        password:
          type: string
          nullable: true
        partner:
          format: int32
          type: integer
        csrfToken:
          type: string
          nullable: true
        subscribeServiceEvents:
          type: boolean
          nullable: true
        subscribeMarketingEvents:
          type: boolean
          nullable: true
        captchaToken:
          type: string
          nullable: true
    StaticPaymentMethodsResponse:
      required:
      - data
      type: object
      properties:
        success:
          type: boolean
        data:
          type: array
          items:
            $ref: "#/components/schemas/CartPaymentMethod"
          nullable: true
        error:
          allOf:
          - $ref: "#/components/schemas/ApiError"
          nullable: true
        message:
          type: string
          nullable: true
    StoreInfo:
      required:
      - storeUrl
      type: object
      properties:
        currentVersion:
          type: string
          nullable: true
        currentVersionCode:
          format: int64
          type: integer
          nullable: true
        minVersion:
          type: string
          nullable: true
        minVersionCode:
          format: int64
          type: integer
          nullable: true
        storeUrl:
          type: string
    Token:
      required:
      - accessToken
      - refreshToken
      - accessTokenExpirySeconds
      - refreshTokenExpirySeconds
      type: object
      properties:
        accessToken:
          type: string
        refreshToken:
          type: string
        accessTokenExpirySeconds:
          format: int64
          type: integer
        refreshTokenExpirySeconds:
          format: int64
          type: integer
    UnitResponse:
      type: object
      properties:
        success:
          type: boolean
        data:
          type: string
          nullable: true
        error:
          allOf:
          - $ref: "#/components/schemas/ApiError"
          nullable: true
        message:
          type: string
          nullable: true
    UnpaidOrder:
      required:
      - orderCode
      - orderIds
      type: object
      properties:
        orderCode:
          type: string
        orderIds:
          type: array
          items:
            type: string
    UnpaidOrdersResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/UnpaidOrder"
          nullable: true
        message:
          type: string
          nullable: true
        success:
          type: boolean
        error:
          allOf:
          - $ref: "#/components/schemas/ApiError"
          nullable: true
    UpdateProfileChildrenRequest:
      description: Модель для обновления данных телефона пользователя
      required:
      - name
      - birthDate
      type: object
      properties:
        name:
          type: string
        surname:
          type: string
          nullable: true
        gender:
          type: string
          nullable: true
        birthDate:
          $ref: "#/components/schemas/LocalDate"
    UpdateProfileEmailRequest:
      description: Модель для обновления данных телефона пользователя
      required:
      - email
      type: object
      properties:
        email:
          type: string
        code:
          format: int32
          type: integer
          nullable: true
    UpdateProfilePhoneRequest:
      description: Модель для обновления данных телефона пользователя
      required:
      - phone
      type: object
      properties:
        phone:
          type: string
        code:
          format: int32
          type: integer
          nullable: true
    UpdateProfileRequest:
      description: Модель для обновления данных профиля пользователя
      type: object
      properties:
        name:
          type: string
          nullable: true
        surname:
          type: string
          nullable: true
        patronymic:
          type: string
          nullable: true
        password:
          type: string
          nullable: true
        birthDate:
          allOf:
          - $ref: "#/components/schemas/LocalDate"
          nullable: true
        subscribeServiceEvents:
          type: boolean
          nullable: true
        subscribeMarketingEvents:
          type: boolean
          nullable: true
  securitySchemes:
    SecurityScheme:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Authentication
tags:
- name: App Version
- name: App Version (admin)
- name: Debug (admin)
- name: Inbox
  description: Список push-уведомлений юзера + mark-read
- name: System
  description: Информация о сборке
- name: Well-Known
  description: RFC 8615 endpoints для deep-links (iOS Universal Links + Android App
    Links)
- name: Авторизация
  description: Операции для управления авторизацией и аутентификацией пользователей
- name: Корзина
  description: Операции для управления корзиной покупок
- name: Профиль
  description: Операции для управления профилем
paths:
  /.well-known/apple-app-site-association:
    get:
      summary: iOS Universal Links manifest (AASA)
      description: Объявляет какие paths домена должен перехватывать iOS app. См.
        apple-app-site-association в Apple Developer Docs.
      tags:
      - Well-Known
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: {}
  /.well-known/assetlinks.json:
    get:
      summary: Android App Links manifest (Digital Asset Links)
      description: Объявляет связь домена с Android app для autoVerify intent-filter'а.
        См. assetlinks.json в Android Developer Docs.
      tags:
      - Well-Known
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: {}
  /api/admin/app-version/current:
    post:
      summary: Установить текущую версию вручную (только если выше существующей)
      tags:
      - App Version (admin)
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SetVersionRequest"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AdminAck"
        "400":
          description: Bad Request
  /api/admin/app-version/min:
    post:
      summary: Установить минимально допустимую версию вручную (без сравнения)
      tags:
      - App Version (admin)
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SetVersionRequest"
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AdminAck"
        "400":
          description: Bad Request
  /api/admin/debug/status:
    get:
      summary: Текущее состояние debug-флагов
      tags:
      - Debug (admin)
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DebugStatus"
  /api/admin/debug/{flag}:
    post:
      summary: Включить/выключить debug-флаг с TTL (auto-expire в Redis)
      tags:
      - Debug (admin)
      parameters:
      - name: flag
        in: path
        required: true
        schema:
          type: string
      - name: enabled
        in: query
        schema:
          type: boolean
      - name: ttlSeconds
        in: query
        schema:
          format: int64
          type: integer
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AdminAck"
  /api/app-version:
    get:
      summary: Текущие и минимальные версии мобильного приложения по сторам
      tags:
      - App Version
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AppVersionResponse"
  /api/notify/inbox:
    get:
      summary: Список уведомлений с пагинацией
      description: По умолчанию unread_only=true. autoMarkRead помечает returned items
        при загрузке inbox-экрана.
      operationId: inboxList
      tags:
      - Inbox
      parameters:
      - name: auto_mark_read
        in: query
        schema:
          type: boolean
          nullable: true
        required: true
      - name: before_id
        in: query
        schema:
          type: string
          nullable: true
        required: true
      - name: limit
        in: query
        schema:
          format: int32
          type: integer
          nullable: true
        required: true
      - name: unread_only
        in: query
        schema:
          type: boolean
          nullable: true
        required: true
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: {}
  /api/notify/inbox/read-all:
    post:
      summary: Пометить все уведомления прочитанными
      operationId: inboxMarkAllRead
      tags:
      - Inbox
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: {}
  /api/notify/inbox/unread-count:
    get:
      summary: Кол-во непрочитанных (для badge)
      operationId: inboxUnreadCount
      tags:
      - Inbox
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: {}
  /api/notify/inbox/{id}/read:
    post:
      summary: Пометить уведомление прочитанным
      operationId: inboxMarkRead
      tags:
      - Inbox
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: {}
  /api/version:
    get:
      summary: Информация о версии сервиса
      tags:
      - System
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  type: string
  /authorization/refresh:
    post:
      summary: Обновление токена доступа
      description: "Обновляет access-токен с использованием refresh-токена, генери\
        рует новый CSRF-токен. Требуется CSRF-токен в cookie и заголовке X-CSRF-Token."
      operationId: refresh
      tags:
      - Авторизация
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "400":
          description: "Ошибка в запросе. errorCode: missing_field, captcha_required,\
            \ device_id_required, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                captcha_required:
                  value:
                    message: Требуется прохождение капчи
                    code: 400
                    errorCode: captcha_required
                    details:
                      siteKey: ysmt-1234567890abcdef
                    success: false
                device_id_required:
                  value:
                    message: Device identifier missing. Retry.
                    code: 400
                    errorCode: device_id_required
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учетные данные. errorCode: csrf_invalid"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "429":
          description: "Rate-limit антиспама. errorCode: rate_limit_phone, rate_limit_ip,\
            \ rate_limit_pin_attempt. Header Retry-After указывает на сколько секу\
            нд блокировка."
          content:
            application/json:
              examples:
                rate_limit_phone:
                  value:
                    message: "Слишком много попыток на этот номер, попробуйте чере\
                      з 10 минут"
                    code: 429
                    errorCode: rate_limit_phone
                    details:
                      retryAfter: 600
                    success: false
                rate_limit_pin_attempt:
                  value:
                    message: Превышен лимит попыток ввода pin-кода
                    code: 429
                    errorCode: rate_limit_pin_attempt
                    details:
                      retryAfter: 900
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down. details.service\
            \ — какой сервис."
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "200":
          description: Успешное обновление токенов
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AuthApiResponse"
  /authorization/restore/byEmail:
    post:
      summary: Восстановление пароля по email
      description: Получение капчи для восстановления пароля через Email
      operationId: restoreByEmail
      tags:
      - Авторизация
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SignInRequest"
        required: true
      responses:
        "400":
          description: "Ошибка в запросе. errorCode: missing_field, captcha_required,\
            \ device_id_required, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                captcha_required:
                  value:
                    message: Требуется прохождение капчи
                    code: 400
                    errorCode: captcha_required
                    details:
                      siteKey: ysmt-1234567890abcdef
                    success: false
                device_id_required:
                  value:
                    message: Device identifier missing. Retry.
                    code: 400
                    errorCode: device_id_required
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учетные данные. errorCode: csrf_invalid"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "429":
          description: "Rate-limit антиспама. errorCode: rate_limit_phone, rate_limit_ip,\
            \ rate_limit_pin_attempt. Header Retry-After указывает на сколько секу\
            нд блокировка."
          content:
            application/json:
              examples:
                rate_limit_phone:
                  value:
                    message: "Слишком много попыток на этот номер, попробуйте чере\
                      з 10 минут"
                    code: 429
                    errorCode: rate_limit_phone
                    details:
                      retryAfter: 600
                    success: false
                rate_limit_pin_attempt:
                  value:
                    message: Превышен лимит попыток ввода pin-кода
                    code: 429
                    errorCode: rate_limit_pin_attempt
                    details:
                      retryAfter: 900
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down. details.service\
            \ — какой сервис."
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "200":
          description: Успешное получение
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CaptchaResponse"
  /authorization/restore/byEmail/complete:
    post:
      summary: "Восстановление пароля: финализация (валидация pin + смена пароля)"
      description: "Принимает email или phone + новый password + captchaCode (pin\
        \ из email/SMS). Атомарно валидирует pin, обновляет пароль и выдаёт свежие\
        \ access/refresh токены. Web: Set-Cookie с access_token/refresh_token/csrf_token.\
        \ Mobile: токены в response body."
      operationId: restorePasswordComplete
      tags:
      - Авторизация
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SignInRequest"
        required: true
      responses:
        "400":
          description: "Ошибка в запросе. errorCode: missing_field, captcha_required,\
            \ device_id_required, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                captcha_required:
                  value:
                    message: Требуется прохождение капчи
                    code: 400
                    errorCode: captcha_required
                    details:
                      siteKey: ysmt-1234567890abcdef
                    success: false
                device_id_required:
                  value:
                    message: Device identifier missing. Retry.
                    code: 400
                    errorCode: device_id_required
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учетные данные. errorCode: csrf_invalid"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "429":
          description: "Rate-limit антиспама. errorCode: rate_limit_phone, rate_limit_ip,\
            \ rate_limit_pin_attempt. Header Retry-After указывает на сколько секу\
            нд блокировка."
          content:
            application/json:
              examples:
                rate_limit_phone:
                  value:
                    message: "Слишком много попыток на этот номер, попробуйте чере\
                      з 10 минут"
                    code: 429
                    errorCode: rate_limit_phone
                    details:
                      retryAfter: 600
                    success: false
                rate_limit_pin_attempt:
                  value:
                    message: Превышен лимит попыток ввода pin-кода
                    code: 429
                    errorCode: rate_limit_pin_attempt
                    details:
                      retryAfter: 900
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down. details.service\
            \ — какой сервис."
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "200":
          description: Успешное получение
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AuthApiResponse"
  /authorization/restore/byEmail/confirm:
    post:
      summary: "[DEPRECATED] Дубль /restore/byEmail — initiation recovery по email"
      description: DEPRECATED. Используйте POST /restore/byEmail. Этот эндпоинт оставлен
        для backward-compat и будет удалён в следующих релизах.
      operationId: restoreByEmailConfirmDeprecated
      deprecated: true
      tags:
      - Авторизация
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SignInRequest"
        required: true
      responses:
        "400":
          description: "Ошибка в запросе. errorCode: missing_field, captcha_required,\
            \ device_id_required, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                captcha_required:
                  value:
                    message: Требуется прохождение капчи
                    code: 400
                    errorCode: captcha_required
                    details:
                      siteKey: ysmt-1234567890abcdef
                    success: false
                device_id_required:
                  value:
                    message: Device identifier missing. Retry.
                    code: 400
                    errorCode: device_id_required
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учетные данные. errorCode: csrf_invalid"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "429":
          description: "Rate-limit антиспама. errorCode: rate_limit_phone, rate_limit_ip,\
            \ rate_limit_pin_attempt. Header Retry-After указывает на сколько секу\
            нд блокировка."
          content:
            application/json:
              examples:
                rate_limit_phone:
                  value:
                    message: "Слишком много попыток на этот номер, попробуйте чере\
                      з 10 минут"
                    code: 429
                    errorCode: rate_limit_phone
                    details:
                      retryAfter: 600
                    success: false
                rate_limit_pin_attempt:
                  value:
                    message: Превышен лимит попыток ввода pin-кода
                    code: 429
                    errorCode: rate_limit_pin_attempt
                    details:
                      retryAfter: 900
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down. details.service\
            \ — какой сервис."
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "200":
          description: Успешное получение
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CaptchaResponse"
  /authorization/restore/captcha:
    get:
      summary: Получение капчи
      description: Получение капчи для восстановления пароля через Email
      operationId: getCaptcha
      tags:
      - Авторизация
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "400":
          description: "Ошибка в запросе. errorCode: missing_field, captcha_required,\
            \ device_id_required, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                captcha_required:
                  value:
                    message: Требуется прохождение капчи
                    code: 400
                    errorCode: captcha_required
                    details:
                      siteKey: ysmt-1234567890abcdef
                    success: false
                device_id_required:
                  value:
                    message: Device identifier missing. Retry.
                    code: 400
                    errorCode: device_id_required
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учетные данные. errorCode: csrf_invalid"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "429":
          description: "Rate-limit антиспама. errorCode: rate_limit_phone, rate_limit_ip,\
            \ rate_limit_pin_attempt. Header Retry-After указывает на сколько секу\
            нд блокировка."
          content:
            application/json:
              examples:
                rate_limit_phone:
                  value:
                    message: "Слишком много попыток на этот номер, попробуйте чере\
                      з 10 минут"
                    code: 429
                    errorCode: rate_limit_phone
                    details:
                      retryAfter: 600
                    success: false
                rate_limit_pin_attempt:
                  value:
                    message: Превышен лимит попыток ввода pin-кода
                    code: 429
                    errorCode: rate_limit_pin_attempt
                    details:
                      retryAfter: 900
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down. details.service\
            \ — какой сервис."
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "200":
          description: Успешное получение
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CaptchaResponse"
  /authorization/signIn:
    post:
      summary: Вход клиента в систему
      description: "Аутентифицирует клиента по email или телефону и паролю, генери\
        рует JWT-токены и CSRF-токен. Требуется CSRF-токен в cookie и заголовке X-CSRF-Token."
      operationId: signIn
      tags:
      - Авторизация
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SignInRequest"
        required: true
      responses:
        "400":
          description: "Ошибка в запросе. errorCode: missing_field, captcha_required,\
            \ device_id_required, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                captcha_required:
                  value:
                    message: Требуется прохождение капчи
                    code: 400
                    errorCode: captcha_required
                    details:
                      siteKey: ysmt-1234567890abcdef
                    success: false
                device_id_required:
                  value:
                    message: Device identifier missing. Retry.
                    code: 400
                    errorCode: device_id_required
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учетные данные. errorCode: csrf_invalid"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "429":
          description: "Rate-limit антиспама. errorCode: rate_limit_phone, rate_limit_ip,\
            \ rate_limit_pin_attempt. Header Retry-After указывает на сколько секу\
            нд блокировка."
          content:
            application/json:
              examples:
                rate_limit_phone:
                  value:
                    message: "Слишком много попыток на этот номер, попробуйте чере\
                      з 10 минут"
                    code: 429
                    errorCode: rate_limit_phone
                    details:
                      retryAfter: 600
                    success: false
                rate_limit_pin_attempt:
                  value:
                    message: Превышен лимит попыток ввода pin-кода
                    code: 429
                    errorCode: rate_limit_pin_attempt
                    details:
                      retryAfter: 900
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down. details.service\
            \ — какой сервис."
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "200":
          description: Успешный вход или ожидание пин-кода
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AuthApiResponse"
  /authorization/signIn/confirm:
    post:
      summary: Подтверждение входа клиента
      description: "Подтверждает вход с помощью пин-кода, генерирует JWT-токены и\
        \ CSRF-токен. Требуется CSRF-токен в cookie и заголовке X-CSRF-Token."
      operationId: signInConfirm
      tags:
      - Авторизация
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SignInConfirmRequest"
        required: true
      responses:
        "400":
          description: "Ошибка в запросе. errorCode: missing_field, captcha_required,\
            \ device_id_required, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                captcha_required:
                  value:
                    message: Требуется прохождение капчи
                    code: 400
                    errorCode: captcha_required
                    details:
                      siteKey: ysmt-1234567890abcdef
                    success: false
                device_id_required:
                  value:
                    message: Device identifier missing. Retry.
                    code: 400
                    errorCode: device_id_required
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учетные данные. errorCode: csrf_invalid"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "429":
          description: "Rate-limit антиспама. errorCode: rate_limit_phone, rate_limit_ip,\
            \ rate_limit_pin_attempt. Header Retry-After указывает на сколько секу\
            нд блокировка."
          content:
            application/json:
              examples:
                rate_limit_phone:
                  value:
                    message: "Слишком много попыток на этот номер, попробуйте чере\
                      з 10 минут"
                    code: 429
                    errorCode: rate_limit_phone
                    details:
                      retryAfter: 600
                    success: false
                rate_limit_pin_attempt:
                  value:
                    message: Превышен лимит попыток ввода pin-кода
                    code: 429
                    errorCode: rate_limit_pin_attempt
                    details:
                      retryAfter: 900
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down. details.service\
            \ — какой сервис."
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "200":
          description: Успешное подтверждение входа
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AuthApiResponse"
  /authorization/signOut:
    post:
      summary: Выход клиента из системы
      description: "Завершает сессию клиента, удаляя JWT-токены и CSRF-токен. Треб\
        уется CSRF-токен в cookie и заголовке X-CSRF-Token."
      operationId: signOut
      tags:
      - Авторизация
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "400":
          description: "Ошибка в запросе. errorCode: missing_field, captcha_required,\
            \ device_id_required, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                captcha_required:
                  value:
                    message: Требуется прохождение капчи
                    code: 400
                    errorCode: captcha_required
                    details:
                      siteKey: ysmt-1234567890abcdef
                    success: false
                device_id_required:
                  value:
                    message: Device identifier missing. Retry.
                    code: 400
                    errorCode: device_id_required
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учетные данные. errorCode: csrf_invalid"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "429":
          description: "Rate-limit антиспама. errorCode: rate_limit_phone, rate_limit_ip,\
            \ rate_limit_pin_attempt. Header Retry-After указывает на сколько секу\
            нд блокировка."
          content:
            application/json:
              examples:
                rate_limit_phone:
                  value:
                    message: "Слишком много попыток на этот номер, попробуйте чере\
                      з 10 минут"
                    code: 429
                    errorCode: rate_limit_phone
                    details:
                      retryAfter: 600
                    success: false
                rate_limit_pin_attempt:
                  value:
                    message: Превышен лимит попыток ввода pin-кода
                    code: 429
                    errorCode: rate_limit_pin_attempt
                    details:
                      retryAfter: 900
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down. details.service\
            \ — какой сервис."
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "200":
          description: Успешный выход
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AuthApiResponse"
  /authorization/signUp:
    post:
      summary: Регистрация нового клиента
      description: Создаёт профиль клиента и отправляет пин-код для подтверждения.
        Требуется CSRF-токен в cookie и заголовке X-CSRF-Token.
      operationId: signUp
      tags:
      - Авторизация
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SignUpRequest"
        required: true
      responses:
        "400":
          description: "Ошибка в запросе. errorCode: missing_field, captcha_required,\
            \ device_id_required, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                captcha_required:
                  value:
                    message: Требуется прохождение капчи
                    code: 400
                    errorCode: captcha_required
                    details:
                      siteKey: ysmt-1234567890abcdef
                    success: false
                device_id_required:
                  value:
                    message: Device identifier missing. Retry.
                    code: 400
                    errorCode: device_id_required
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учетные данные. errorCode: csrf_invalid"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "429":
          description: "Rate-limit антиспама. errorCode: rate_limit_phone, rate_limit_ip,\
            \ rate_limit_pin_attempt. Header Retry-After указывает на сколько секу\
            нд блокировка."
          content:
            application/json:
              examples:
                rate_limit_phone:
                  value:
                    message: "Слишком много попыток на этот номер, попробуйте чере\
                      з 10 минут"
                    code: 429
                    errorCode: rate_limit_phone
                    details:
                      retryAfter: 600
                    success: false
                rate_limit_pin_attempt:
                  value:
                    message: Превышен лимит попыток ввода pin-кода
                    code: 429
                    errorCode: rate_limit_pin_attempt
                    details:
                      retryAfter: 900
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down. details.service\
            \ — какой сервис."
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "200":
          description: "Успешная регистрация, ожидается подтверждение пин-кода"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AuthApiResponse"
  /authorization/signUp/confirm:
    post:
      summary: Подтверждение регистрации клиента
      description: "Подтверждает регистрацию с помощью пин-кода, генерирует JWT-то\
        кены и CSRF-токен. Требуется CSRF-токен в cookie и заголовке X-CSRF-Token.\
        \ Пин-код по умолчанию для тестов: 1234."
      operationId: signUpConfirm
      tags:
      - Авторизация
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SignUpConfirmRequest"
        required: true
      responses:
        "400":
          description: "Ошибка в запросе. errorCode: missing_field, captcha_required,\
            \ device_id_required, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                captcha_required:
                  value:
                    message: Требуется прохождение капчи
                    code: 400
                    errorCode: captcha_required
                    details:
                      siteKey: ysmt-1234567890abcdef
                    success: false
                device_id_required:
                  value:
                    message: Device identifier missing. Retry.
                    code: 400
                    errorCode: device_id_required
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учетные данные. errorCode: csrf_invalid"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "429":
          description: "Rate-limit антиспама. errorCode: rate_limit_phone, rate_limit_ip,\
            \ rate_limit_pin_attempt. Header Retry-After указывает на сколько секу\
            нд блокировка."
          content:
            application/json:
              examples:
                rate_limit_phone:
                  value:
                    message: "Слишком много попыток на этот номер, попробуйте чере\
                      з 10 минут"
                    code: 429
                    errorCode: rate_limit_phone
                    details:
                      retryAfter: 600
                    success: false
                rate_limit_pin_attempt:
                  value:
                    message: Превышен лимит попыток ввода pin-кода
                    code: 429
                    errorCode: rate_limit_pin_attempt
                    details:
                      retryAfter: 900
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down. details.service\
            \ — какой сервис."
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "200":
          description: Успешное подтверждение регистрации
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AuthApiResponse"
  /v1/cart:
    get:
      summary: Получить корзину
      description: Возвращает содержимое корзины по идентификатору пользователя или
        сессии.
      operationId: get
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/add/item:
    post:
      summary: Добавить или обновить товар в корзине
      description: Добавляет или обновляет количество товара в корзине. Требуется
        CSRF-токен в cookie и заголовке X-CSRF-Token.
      operationId: addItem
      tags:
      - Корзина
      parameters:
      - name: select
        in: query
        schema:
          type: boolean
          nullable: true
        required: true
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        description: Данные запроса
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartRequest"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/add/promo:
    post:
      summary: Добавить промокод в корзину
      description: Добавляет промокод к корзине. Требуется CSRF-токен в cookie и заголовке
        X-CSRF-Token.
      operationId: addPromo
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        description: Данные запроса
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartRequest"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/bonuses/type:
    post:
      summary: Установить сумму списываемых бонусов
      description: Изменяет тип использования бонусов в корзине. Требуется CSRF-токен
        в cookie и заголовке X-CSRF-Token.
      operationId: bonusesProcess
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        description: Данные запроса
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartRequest"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/clear:
    post:
      summary: Очистка корзины
      description: Очищает корзину пользователя или сессии. Требуется CSRF-токен в
        cookie и заголовке X-CSRF-Token.
      operationId: clear
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        description: Данные запроса
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartRequest"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/context/update:
    post:
      summary: Обновление контекста корзины
      description: Обновление контекста корзины
      operationId: contextUpdate
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        description: Данные запроса
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartRequest"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/delivery/providers:
    get:
      summary: Получить список доступных провайдеров доставки
      description: Возвращает список провайдеров доставки. Текущий список — статичный
        placeholder из одного элемента «our_delivery»; в будущем будет считаться динамически.
      operationId: getDeliveryProviders
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Массив DeliveryProvider (top-level JSON array)
          content:
            application/json:
              examples:
                default:
                  value:
                  - id: our_delivery
                    name: Доставка ВОТОНЯ
                    icon: null
                    days: null
                    description: Самая быстрая на диком западе
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/DeliveryProvider"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/delivery/type:
    post:
      summary: Изменить тип доставки
      description: Изменяет тип доставки (устарело). Требуется CSRF-токен в cookie
        и заголовке X-CSRF-Token.
      operationId: deliveryType
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        description: Данные запроса
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartRequest"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/generate-uuid:
    get:
      summary: Зарегестрировать UUID для работы с запросами (если есть такая необходимость)
      description: Создаёт UUID
      operationId: getRegisteredUUID
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RegisteredUUIDResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/location:
    post:
      summary: Изменить место доставки
      description: Изменяет место доставки. Требуется CSRF-токен в cookie и заголовке
        X-CSRF-Token.
      operationId: location
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        description: Данные запроса
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartRequest"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/location/list:
    get:
      summary: Список магазинов доставки
      description: Получение списка магазинов доставки доставки
      operationId: getLocations
      tags:
      - Корзина
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LocationsResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/order/create:
    post:
      summary: Создать заказ из корзины
      description: Создаёт заказ из корзины. Требуется CSRF-токен в cookie и заголовке
        X-CSRF-Token.
      operationId: orderCreate
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        description: Данные запроса
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartRequest"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/order/preview:
    post:
      summary: Создать заказ из корзины
      description: Создаёт заказ из корзины. Требуется CSRF-токен в cookie и заголовке
        X-CSRF-Token.
      operationId: orderPreview
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        description: Данные запроса
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartRequest"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
    get:
      summary: Создать заказ из корзины
      description: Создаёт заказ из корзины. Требуется CSRF-токен в cookie и заголовке
        X-CSRF-Token.
      operationId: getOrderPreview
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/payment/methods:
    get:
      summary: Получить возможные методы оплаты
      description: Устарело. Используйте getPaymentMethods
      operationId: paymentMethods
      deprecated: true
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успешно
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentMethodsResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/payment/methods-list:
    get:
      summary: Получить возможные методы оплаты
      description: Возвращает доступные способы оплаты с учётом склада и типа доставки
      operationId: getPaymentMethods
      tags:
      - Корзина
      parameters:
      - name: png
        in: query
        schema:
          type: boolean
          nullable: true
        required: true
      - name: svg
        in: query
        schema:
          type: boolean
          nullable: true
        required: true
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успешно
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/StaticPaymentMethodsResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/payment/type:
    post:
      summary: Изменить тип оплаты
      description: Изменяет тип оплаты в корзине. Требуется CSRF-токен в cookie и
        заголовке X-CSRF-Token.
      operationId: paymentType
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        description: Данные запроса
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartRequest"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/remove/item:
    post:
      summary: Удалить товар из корзины
      description: Удаляет товар из корзины. Требуется CSRF-токен в cookie и заголовке
        X-CSRF-Token.
      operationId: removeItem
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        description: Данные запроса
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartRequest"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/remove/promo:
    delete:
      summary: Удалить промокод из корзины
      description: Добавляет промокод к корзине. Требуется CSRF-токен в cookie и заголовке
        X-CSRF-Token.
      operationId: removePromo
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        description: Удалить промокод из корзины
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartRequest"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/remove/selected:
    post:
      summary: Удалить все выбранные товары из корзины
      description: Удаляет выбранные товары из корзины. Требуется CSRF-токен в cookie
        и заголовке X-CSRF-Token.
      operationId: removeSelected
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        description: Данные запроса
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartRequest"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/select/all:
    post:
      summary: Выбрать все товары в корзине
      description: Выбирает все товары в корзине. Требуется CSRF-токен в cookie и
        заголовке X-CSRF-Token.
      operationId: selectAll
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        description: Данные запроса
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartRequest"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/select/item:
    post:
      summary: Выбрать конкретный товар в корзине
      description: Выбирает конкретный товар в корзине. Требуется CSRF-токен в cookie
        и заголовке X-CSRF-Token.
      operationId: selectItem
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        description: Данные запроса
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartRequest"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/select/unselect:
    post:
      summary: Убрать выделение с конкретных товаров в корзине
      description: Убрать выделение с конкретных товаров в корзине. Требуется CSRF-токен
        в cookie и заголовке X-CSRF-Token.
      operationId: unselectItems
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        description: Данные запроса
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartRequest"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/cart/user:
    post:
      summary: Изменить получателя заказа
      description: Изменяет (переопределяет) получателя заказа. Требуется CSRF-токен
        в cookie и заголовке X-CSRF-Token.
      operationId: user
      tags:
      - Корзина
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        description: Данные запроса
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CartRequest"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ invalid_uuid, csrf_invalid"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                invalid_format:
                  value:
                    message: Количество должно быть положительным
                    code: 400
                    errorCode: invalid_format
                    details:
                      field: quantity
                      expected: положительным
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: item_not_found (товар в корзине), default_not_set\
            \ (default warehouse/address)"
          content:
            application/json:
              examples:
                item_not_found:
                  value:
                    message: Товар sku-12345 не найден в корзине
                    code: 404
                    errorCode: item_not_found
                    details:
                      productId: sku-12345
                    success: false
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "418":
          description: UI-плашка для юзера (CartExceptionMessage)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "422":
          description: "Бизнес-инвариант нарушен. errorCode: cart_full (details: maxItems,\
            \ currentItems)"
          content:
            application/json:
              examples:
                cart_full:
                  value:
                    message: Корзина переполнена (максимум 60 товаров)
                    code: 422
                    errorCode: cart_full
                    details:
                      maxItems: 60
                      currentItems: 60
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Внутренняя ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "540":
          description: "Cart-специфичный код: корзина пуста. errorCode: cart_empty"
          content:
            application/json:
              examples:
                cart_empty:
                  value:
                    message: Корзина пуста
                    code: 540
                    errorCode: cart_empty
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "541":
          description: "Cart-специфичный код: данные логистики устарели — обновить\
            \ корзину"
          content:
            application/json:
              examples:
                logistics_expired:
                  value:
                    message: "Данные логистики устарели, обновите страницу"
                    code: 541
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer:
    get:
      summary: "Получение профиля пользователя по userId (адреса,магазин...)"
      operationId: getProfileByUserId
      tags:
      - Профиль
      parameters:
      - name: invalidate
        in: query
        schema:
          type: boolean
          nullable: true
        required: true
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CustomerProfileResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/account/delete:
    delete:
      summary: Удаление аккаунта пользователя
      operationId: deleteAccount
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnitResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/account/update:
    post:
      summary: Обновление данных профиля пользователя
      operationId: updateProfile
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateProfileRequest"
        required: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CustomerProfileResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/account/update/email:
    post:
      summary: Обновление данных email пользователя
      operationId: updateEmail
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateProfileEmailRequest"
        required: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnitResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/account/update/phone:
    post:
      summary: Обновление данных телефона пользователя
      description: Первый запрос с номером телефона - Второй с телефоном и кодом подтверждения
      operationId: updatePhoneNumber
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateProfilePhoneRequest"
        required: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnitResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/address:
    delete:
      summary: Удаление адреса доставки
      operationId: addressRemove
      tags:
      - Профиль
      parameters:
      - name: addressKey
        in: query
        schema:
          type: string
        required: true
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
    post:
      summary: Добавление нового адреса доставки
      operationId: addressAdd
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CustomerAddressData"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/address/default:
    post:
      summary: Сделать адрес доставки выбираемым по умолчанию
      operationId: setAddressDefault
      tags:
      - Профиль
      parameters:
      - name: addressKey
        in: query
        schema:
          type: string
        required: true
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
    delete:
      summary: Удалить адрес доставки выбираемый по умолчанию
      operationId: removeAddressDefault
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
    get:
      summary: Адрес доставки по умолчанию
      operationId: addressDefault
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/children:
    put:
      summary: Добавить данные ребенка пользователя
      operationId: childrenAdd
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateProfileChildrenRequest"
        required: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnitResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
    delete:
      summary: Удалить дфнные о ребенке пользователя
      operationId: childrenRemoveById
      tags:
      - Профиль
      parameters:
      - name: childrenId
        in: query
        schema:
          type: string
        required: true
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnitResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
    get:
      summary: Получить данные ребенкОВ пользователя
      operationId: childrenList
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CustomerChildrenListResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/contact:
    delete:
      summary: Удаление контакта для доставки
      operationId: contactRemove
      tags:
      - Профиль
      parameters:
      - name: contactKey
        in: query
        schema:
          type: string
        required: true
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
    post:
      summary: Добавление нового контакта для доставки
      operationId: contactAdd
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CustomerContact"
        required: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/contact/default:
    post:
      summary: Сделать контакт для доставки выбираемым по умолчанию
      operationId: setContactDefault
      tags:
      - Профиль
      parameters:
      - name: contactKey
        in: query
        schema:
          type: string
        required: true
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
    delete:
      summary: Удалить контакт для доставки выбираемый по умолчанию
      operationId: removeContactDefault
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
    get:
      summary: Контакт доставки по умолчанию
      operationId: contactDefault
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/delivery-type/default:
    post:
      summary: Тип доставки по умолчанию
      operationId: deliveryTypeDefault
      tags:
      - Профиль
      parameters:
      - name: value
        in: query
        schema:
          $ref: "#/components/schemas/DeliveryType"
        required: true
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/device:
    post:
      summary: Регистрация / обновление FCM-устройства
      description: "Принимает FCM-токен + платформу. deviceId/appId — из заголовко\
        в X-Device-Id/X-App-Id. Регистрация анонимная, если пользователь не автори\
        зован; userId привязывается автоматически после signIn."
      operationId: registerCustomerDevice
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RegisterDeviceBody"
        required: true
      responses:
        "200":
          description: Успешно зарегистрирован (success=true) или notification недоступен
            (success=false)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DeviceRegisteredResponse"
        "400":
          description: "Невалидный запрос: пустой X-Device-Id, fcmToken или некорр\
            ектный platform"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: Неавторизованный (для зарегистрированной регистрации)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/devices:
    get:
      summary: Список активных устройств юзера
      description: "Возвращает все active device юзера с пометкой текущего устройс\
        тва (`current=true` для того deviceId, с которого пришёл запрос)."
      operationId: listCustomerDevices
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успешно
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListCustomerDevicesResponse"
        "400":
          description: "Некорректный запрос. errorCode: invalid_uuid (для deactivate\
            \ с невалидным UUID)"
          content:
            application/json:
              examples:
                invalid_uuid:
                  value:
                    message: "invalid device id: foo"
                    code: 400
                    errorCode: invalid_uuid
                    details:
                      value: foo
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: Strict-mode (header X-Strict-Auth-Codes=true) без auth-creds
            — требуется логин
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: Устройство не принадлежит юзеру или уже закрыто (deactivate)
          content:
            application/json:
              examples:
                device_not_found:
                  value:
                    message: device 7f3a... не найден среди устройств юзера
                    code: 404
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Notification-сервис недоступен. errorCode: upstream_down (details.service=notification)"
          content:
            application/json:
              examples:
                notification_down:
                  value:
                    message: "Сервис «notification» временно недоступен, попробуйт\
                      е позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: notification
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/devices/{id}/deactivate:
    post:
      summary: Закрыть сессию устройства
      description: "Помечает device revoked в notification и кладёт его deviceId в\
        \ Redis blacklist (`auth:blocked-device:{id}`). После этого validateAccessToken\
        \ для запросов с этого device возвращает 401 (Phase 8). UUID должен принад\
        лежать текущему юзеру."
      operationId: deactivateCustomerDevice
      tags:
      - Профиль
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DeactivateCustomerDeviceRequest"
        required: true
      responses:
        "200":
          description: Успешно
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListCustomerDevicesResponse"
        "400":
          description: "Некорректный запрос. errorCode: invalid_uuid (для deactivate\
            \ с невалидным UUID)"
          content:
            application/json:
              examples:
                invalid_uuid:
                  value:
                    message: "invalid device id: foo"
                    code: 400
                    errorCode: invalid_uuid
                    details:
                      value: foo
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: Strict-mode (header X-Strict-Auth-Codes=true) без auth-creds
            — требуется логин
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: Устройство не принадлежит юзеру или уже закрыто (deactivate)
          content:
            application/json:
              examples:
                device_not_found:
                  value:
                    message: device 7f3a... не найден среди устройств юзера
                    code: 404
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Notification-сервис недоступен. errorCode: upstream_down (details.service=notification)"
          content:
            application/json:
              examples:
                notification_down:
                  value:
                    message: "Сервис «notification» временно недоступен, попробуйт\
                      е позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: notification
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/favorites:
    get:
      summary: Получение списка избранных товаров клиента
      operationId: getFavorites
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CustomerFavoritesResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/favorites/{productId}:
    delete:
      summary: Удаление товара из списка избранных товаров клиента
      operationId: removeFromFavorites
      tags:
      - Профиль
      parameters:
      - name: productId
        in: path
        required: true
        schema:
          type: string
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnitResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
    put:
      summary: Добавление товара в список избранных товаров клиента
      operationId: addToFavorites
      tags:
      - Профиль
      parameters:
      - name: productId
        in: path
        required: true
        schema:
          type: string
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnitResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/order:
    get:
      summary: Получение заказа по id
      operationId: getOrder
      tags:
      - Профиль
      parameters:
      - name: orderId
        in: query
        schema:
          type: string
        required: true
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CustomerOrdersResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/order/cancel:
    delete:
      summary: Отмена заказа по id либо по orderCode
      operationId: cancelOrder
      tags:
      - Профиль
      parameters:
      - name: orderCode
        in: query
        schema:
          type: string
          nullable: true
        required: true
      - name: orderId
        in: query
        schema:
          type: string
          nullable: true
        required: true
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnitResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/order/cart:
    get:
      summary: Получение корзины заказа по объединяющему полю order_code
      operationId: getOrderCart
      tags:
      - Профиль
      parameters:
      - name: orderCode
        in: query
        schema:
          type: string
        required: true
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/order/payment-link:
    post:
      summary: Получение ссылки на оплату (по заказу и типу оплаты)
      description: получение ссылки на оплату. Требуется CSRF-токен в cookie и заголовке
        X-CSRF-Token.
      operationId: getPaymentLink
      tags:
      - Профиль
      parameters:
      - name: orderCode
        in: query
        schema:
          type: string
        required: true
      - name: paymentType
        in: query
        schema:
          allOf:
          - $ref: "#/components/schemas/PaymentType"
          nullable: true
        required: true
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CartResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/order/repeat:
    post:
      summary: Повторить заказ по id либо по orderCode
      operationId: repeatOrder
      tags:
      - Профиль
      parameters:
      - name: orderCode
        in: query
        schema:
          type: string
          nullable: true
        required: true
      - name: orderId
        in: query
        schema:
          type: string
          nullable: true
        required: true
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnitResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/orders:
    get:
      summary: Получение списка заказов
      operationId: getOrders
      tags:
      - Профиль
      parameters:
      - name: archive
        in: query
        schema:
          type: boolean
          nullable: true
        required: true
      - name: limit
        in: query
        schema:
          format: int32
          type: integer
          nullable: true
        required: true
      - name: seek
        in: query
        schema:
          format: int32
          type: integer
          nullable: true
        required: true
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CustomerOrdersResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/orders/total-count:
    get:
      summary: Получение счётчиков заказов покупателя
      description: Возвращает active / archived / total — счётчики заказов покупателя
        без выгрузки самих заказов. Лёгкий запрос для бейджей в UI («у вас N активных
        заказов»).
      operationId: getOrdersTotalCount
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Счётчики заказов
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CustomerOrdersTotalCountResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/orders/unpaid:
    get:
      summary: Получение списка не оплаченных заказов
      operationId: getOrdersUnpaid
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UnpaidOrdersResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/warehouse/default:
    post:
      summary: Сделать магазин выбираемым по умолчанию
      operationId: setWarehouseDefault
      tags:
      - Профиль
      parameters:
      - name: warehouse
        in: query
        schema:
          type: string
        required: true
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
    delete:
      summary: Удаление магазина доставки по умолчанию
      operationId: removeWarehouseDefault
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
    get:
      summary: Магазин по умолчанию
      operationId: warehouseDefault
      tags:
      - Профиль
      parameters:
      - description: Реальный IP клиента от DDoS-Guard (серверный заголовок)
        name: DDG-Connecting-IP
        in: header
        schema:
          type: string
          nullable: true
      - name: Origin
        in: header
        schema:
          type: string
          nullable: true
      - name: User-Agent
        in: header
        schema:
          type: string
          nullable: true
      - description: Сгенерированный app id в заголовке
        name: X-APP-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: CSRF-токен в заголовке
        name: X-CSRF-Token
        in: header
        schema:
          type: string
          nullable: true
      - name: X-Cart-Test-Flags
        in: header
        schema:
          type: string
          nullable: true
      - description: Тип клиента (browser или mobile)
        name: X-Client-Type
        in: header
        schema:
          type: string
          nullable: true
      - description: Vendor app ID в заголовке
        name: X-DEVICE-ID
        in: header
        schema:
          type: string
          nullable: true
      - description: Реальный IP клиента от mobile gateway
        name: X-Real-Client-IP
        in: header
        schema:
          type: string
          nullable: true
      - description: "true — использовать новые HTTP-коды (403 для no-auth, 401 дл\
          я invalid). По умолчанию legacy."
        name: X-Strict-Auth-Codes
        in: header
        schema:
          type: string
          nullable: true
      - name: __ddg1_
        in: cookie
        schema:
          type: string
          nullable: true
      - name: __ddg9_
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Access-токен
        name: access-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Идентификатор сессии
        name: cart-session
        in: cookie
        schema:
          type: string
          nullable: true
      - name: client-device-id
        in: cookie
        schema:
          type: string
          nullable: true
      - description: CSRF-токен из cookie
        name: csrf-token
        in: cookie
        schema:
          type: string
          nullable: true
      - description: Refresh-токен
        name: refresh-token
        in: cookie
        schema:
          type: string
          nullable: true
      responses:
        "200":
          description: Успешно выполнено
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
  /v1/customer/warehouses:
    get:
      summary: Список магазинов доставки
      description: Получение списка магазинов доставки доставки
      operationId: getWarehousesAll
      tags:
      - Профиль
      parameters:
      - name: ids
        in: query
        schema:
          type: string
          nullable: true
        required: true
      responses:
        "200":
          description: Успех
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LocationsResponse"
        "400":
          description: "Некорректный запрос. errorCode: missing_field, invalid_format,\
            \ limit_exceeded"
          content:
            application/json:
              examples:
                missing_field:
                  value:
                    message: Не указано обязательное поле «paymentType»
                    code: 400
                    errorCode: missing_field
                    details:
                      field: paymentType
                    success: false
                limit_exceeded:
                  value:
                    message: "Значение «limit» превышает допустимый максимум: 10"
                    code: 400
                    errorCode: limit_exceeded
                    details:
                      field: limit
                      limit: 10
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "401":
          description: "Неавторизованный доступ. errorCode: token_expired, device_session_revoked"
          content:
            application/json:
              examples:
                token_expired:
                  value:
                    message: token expired
                    code: 401
                    errorCode: token_expired
                    success: false
                device_session_revoked:
                  value:
                    message: device session revoked
                    code: 401
                    errorCode: device_session_revoked
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "403":
          description: "Недействительные учётные данные / CSRF-токен (legacy mode,\
            \ без header X-Strict-Auth-Codes)"
          content:
            application/json:
              examples:
                csrf_invalid:
                  value:
                    message: Недействительный токен
                    code: 403
                    errorCode: csrf_invalid
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "404":
          description: "Не найдено. errorCode: default_not_set (default address/warehouse/contact),\
            \ order_not_found"
          content:
            application/json:
              examples:
                default_not_set:
                  value:
                    message: "Значение по умолчанию не установлено: default_warehouse"
                    code: 404
                    details:
                      type: default_warehouse
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: Ошибка сервера
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "502":
          description: "Upstream-сервис недоступен. errorCode: upstream_down (details.service:\
            \ order-build, payment-gateway, …)"
          content:
            application/json:
              examples:
                upstream_down:
                  value:
                    message: "Сервис «order-build» временно недоступен, попробуйте\
                      \ позже"
                    code: 502
                    errorCode: upstream_down
                    details:
                      service: order-build
                    success: false
              schema:
                $ref: "#/components/schemas/ApiError"
info:
  title: ecom-cart API
  version: 26.06.25-unknown.unknown
