openapi: 3.0.0
info:
  title: Search Booster API
  description: This is a searchbooster API. Take UUID(apikey) from project settings
  contact:
    email: support@searchbooster.io
  version: 1.0.0
servers:
  - url: https://api4.searchbooster.io/
    description: SwaggerHub API Auto Mocking
tags:
  - name: Events collection
  - name: Recommendations
  - name: Widgets
  - name: search
    description: Main search endpoint
  - name: completions
    description: Completions endpoint
paths:
  /api/{uuid}/widgets/{id}:
    get:
      tags:
        - Widgets
      summary: widgets list
      operationId: widgetList
      parameters:
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: id
          in: path
          description: widget type id
          required: true
          schema:
            type: string
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AllContacts'
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
  /api/{uuid}/similar:
    get:
      tags:
        - Widgets
      summary: session recomendations
      operationId: widgetSimilar
      parameters:
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: id
          in: query
          description: goods id
          required: false
          schema:
            type: string
        - name: regionId
          in: query
          required: false
          schema:
            type: string
        - name: type
          in: query
          description: 0 - similar by text. 1 - similar by widget
          required: false
          schema:
            type: integer
        - name: useScriptScore
          in: query
          description: "null - use fro, admin. false - widthout script score. true - use scriptScore from query"
          required: false
          schema:
            type: boolean
        - name: scriptScore
          in: query
          description: override admion script score
          required: false
          schema:
            type: string
        - name: limit
          in: query
          required: false
          schema:
            type: integer
        - name: imagesSize
          in: query
          description: example string - {"width":10,"height":10}
          required: false
          schema:
            type: string
        - name: filters
          in: query
          description: example string - [{"type":"priceRange|sameCategory|availableOnly","lte":10,"gte":10,"delta":10}]
          required: false
          schema:
            type: string
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AllContacts'
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
  /api/{uuid}/popular-brand:
    get:
      deprecated: true
      tags:
        - Widgets
      summary: Популярные бренды
      operationId: popularBrand
      parameters:
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          style: simple
          explode: false
          schema:
            type: string
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                type: array
                description: "Id of the elements, found by articul(sku)"
                items:
                  type: string
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
  /api/{uuid}/popular:
    get:
      tags:
        - Widgets
      summary: Популярные товары
      operationId: popular
      parameters:
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: userId
          in: query
          description: ИД пользователя
          required: false
          schema:
            type: string
        - name: regionId
          in: query
          required: false
          schema:
            type: string
        - name: limit
          in: query
          required: false
          schema:
            type: integer
        - name: imagesSize
          in: query
          description: example string - {"width":10,"height":10}
          required: false
          schema:
            type: string
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AllContacts'
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
  /api/{uuid}/with-discount:
    get:
      deprecated: true
      tags:
        - Widgets
      summary: товары, которыми пользователь интересовался/популярные товары продающиеся со скидкой
      operationId: withDiscount
      parameters:
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: userId
          in: query
          description: ИД пользователя
          required: false
          schema:
            type: string
        - name: regionId
          in: query
          required: false
          schema:
            type: string
        - name: limit
          in: query
          required: false
          schema:
            type: integer
        - name: imagesSize
          in: query
          description: example string - {"width":10,"height":10}
          required: false
          schema:
            type: string
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AllContacts'
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
  /api/{uuid}/with-this-product:
    post:
      tags:
        - Widgets
      summary: buy with this product
      operationId: withThisProduct
      parameters:
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: id
          in: query
          description: ИД товаров. необходимо при type = 0,1,2
          required: false
          schema:
            type: string
        - name: query
          in: query
          description: Запрос. необходимо при type = 3
          required: false
          schema:
            type: string
        - name: regionId
          in: query
          required: false
          schema:
            type: string
        - name: type
          in: query
          required: false
          description: 0 - с этим товаром просматривают. 1 - с этим товаром покупают. 2 - просматривающие эти товары покупают. 3 - Пользователи, которые это искали, также покупали
          schema:
            default: 0
            type: integer
            enum: [0, 1, 2, 3]
        - name: limit
          in: query
          required: false
          schema:
            type: integer
        - name: imagesSize
          in: query
          description: example string - {"width":10,"height":10}
          required: false
          schema:
            type: string
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AllContacts'
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
  /api/{uuid}/widget-analytics:
    post:
      tags:
        - Events collection
      summary: feedbacks
      operationId: widgetAnalytics
      parameters:
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/WidgetAnalyticsRequest'
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AllContacts'
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
  /api/{uuid}/recs:
    post:
      tags:
        - Events collection
      summary: feedbacks
      operationId: gorseFeedback
      parameters:
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/RecommendationRequest'
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AllContacts'
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
  /api/{uuid}/rec/session/{categoryId}:
    post:
      deprecated: true
      tags:
        - Recommendations
      summary: session recomendations
      operationId: gorseSessionRecomendation
      parameters:
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: categoryId
          in: path
          description: categoryId
          required: false
          style: simple
          explode: false
          schema:
            type: string
        - name: imagesSize
          in: query
          description: example string - {"width":10,"height":10}
          required: false
          schema:
            type: string
        - name: limit
          in: query
          required: false
          schema:
            type: integer
        - name: offset
          in: query
          required: false
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/SessionRequestElement'
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AllContacts'
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
  /api/{uuid}/rec/popular:
    get:
      deprecated: true
      tags:
        - Recommendations
      summary: popular recomendations
      operationId: gorseRecomendationPopular
      parameters:
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: imagesSize
          in: query
          description: example string - {"width":10,"height":10}
          required: false
          schema:
            type: string
        - name: limit
          in: query
          required: false
          schema:
            type: integer
        - name: offset
          in: query
          required: false
          schema:
            type: integer
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AllContacts'
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
  /api/{uuid}/rec/personal/{userId}/{categoryId}:
    get:
      deprecated: true
      tags:
        - Recommendations
      summary: personal recomendations
      operationId: gorseRecomendationPersonal
      parameters:
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: userId
          in: path
          description: userId
          required: false
          style: simple
          explode: false
          schema:
            type: string
        - name: categoryId
          in: path
          description: categoryId
          required: false
          style: simple
          explode: false
          schema:
            type: string
        - name: imagesSize
          in: query
          description: example string - {"width":10,"height":10}
          required: false
          schema:
            type: string
        - name: limit
          in: query
          required: false
          schema:
            type: integer
        - name: offset
          in: query
          required: false
          schema:
            type: integer
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AllContacts'
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
  /api/{uuid}/search/:
    get:
      tags:
        - search
      summary: searches inventory
      description: |
        By passing in the appropriate options, you can search for
        available inventory in the system
      operationId: searchInventory
      parameters:
        - $ref: '#/components/parameters/paramParam'
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: regionId
          in: query
          description: ID of region or city(optional)
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: sortBy
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: string
            description: "price,available,_score(relevance)"
            example: price
        - name: sortDest
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: string
            enum:
              - DESC
              - ASC
        - name: categoryId
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: integer
        - name: query
          in: query
          style: form
          explode: true
          schema:
            type: string
          example: microwave
        - name: userId
          in: query
          description: "userId, for storing user history data"
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: ANY-SEARCH-ID
        - name: searchId
          in: query
          description: id of search session
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: ANY-USER-ID
        - name: queryId
          in: query
          description: id of query
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: ANY-QUERY-ID
        - name: skip
          in: query
          description: number of records to skip for pagination
          required: false
          style: form
          explode: true
          schema:
            minimum: 0
            type: integer
            format: int32
        - name: limit
          in: query
          description: maximum number of records to return
          required: false
          style: form
          explode: true
          schema:
            maximum: 1000
            minimum: 0
            type: integer
            format: int32
        - name: imagesSize
          in: query
          description: example string - {"width":10,"height":10}
          required: false
          schema:
            type: string
        - name: groupByCategories
          in: query
          required: false
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/groupByCategories'
      requestBody:
        description: Optional description in *Markdown*
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                image:
                  type: string
                  example: data:image/jpeg;base64,.....
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchData'
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
  /api/{uuid}/search/structure-by-category:
    get:
      tags:
        - search
      summary: searches inventory and groups the result into categories
      description: |
        Performs a search by the passed categories in the structureByCategoryId parameter 
        and outputs a grouped search result for each passed category.
      operationId: searchInventoryWithStructureByCategory
      parameters:
        - $ref: '#/components/parameters/paramParam'
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: structureByCategoryId
          in: query
          description: List of category IDs for grouping search results by them
          required: true
          explode: true
          schema:
            type: string
            example: "[\"3\", \"7\", \"9\"]"
        - name: regionId
          in: query
          description: ID of region or city(optional)
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: sortBy
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: string
            description: "price,available,_score(relevance)"
            example: price
        - name: sortDest
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: string
            enum:
              - DESC
              - ASC
        - name: categoryId
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: integer
        - name: query
          in: query
          style: form
          explode: true
          schema:
            type: string
          example: microwave
        - name: userId
          in: query
          description: "userId, for storing user history data"
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: ANY-SEARCH-ID
        - name: searchId
          in: query
          description: id of search session
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: ANY-USER-ID
        - name: queryId
          in: query
          description: id of query
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: ANY-QUERY-ID
        - name: skip
          in: query
          description: number of records to skip for pagination
          required: false
          style: form
          explode: true
          schema:
            minimum: 0
            type: integer
            format: int32
        - name: limit
          in: query
          description: maximum number of records to return
          required: false
          style: form
          explode: true
          schema:
            maximum: 1000
            minimum: 0
            type: integer
            format: int32
        - name: imagesSize
          in: query
          description: example string - {"width":10,"height":10}
          required: false
          schema:
            type: string
        - name: groupByCategories
          in: query
          required: false
          style: form
          explode: true
          schema:
            $ref: '#/components/schemas/groupByCategories'
      requestBody:
        description: Optional description in *Markdown*
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                image:
                  type: string
                  example: data:image/jpeg;base64,.....
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchDataWithGropedByCategories'
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
  /api/{uuid}/find-by-id:
    get:
      tags:
        - search
      summary: get one offer
      operationId: findById
      parameters:
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: id
          in: query
          description: ID of offer
          required: true
          style: form
          explode: true
          schema:
            type: string
        - name: regionId
          in: query
          description: ID of region or city(optional)
          required: false
          style: form
          explode: true
          schema:
            type: string
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                type: object
                properties:
                  offer:
                    $ref: '#/components/schemas/Offer'
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
  /api/{uuid}/event/click.json:
    get:
      tags:
        - analytics
      summary: track click on product
      parameters:
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: type
          in: query
          description: type of entity
          required: true
          style: form
          explode: true
          schema:
            type: string
          example: ProductClick
        - name: userId
          in: query
          description: "userId, for storing user history data"
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: ANY-SEARCH-ID
        - name: searchId
          in: query
          description: id of search session
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: ANY-USER-ID
        - name: queryId
          in: query
          description: id of query
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: ANY-QUERY-ID
        - name: from
          in: from
          description: в каком месте было совершено действие
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: widget_discount
        - name: entityId
          in: query
          description: id of entity
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: http://site.com/goods/1
        - name: params
          in: query
          description: params of click
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: {"offerId": 123, "pos": 1}
        - name: productClickVendor
          in: query
          description: offer's vendor for productClick event
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: Apple
      responses:
        "200":
          description: tracking result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrackResult'
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
  /api/{uuid}/cart:
    post:
      tags:
        - analytics
      summary: track user cart
      parameters:
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          style: simple
          explode: false
          schema:
            type: string
      requestBody:
        description: Optional description in *Markdown*
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostBodyCart'
      responses:
        "200":
          description: tracking result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrackResult'
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
  /api/{uuid}/completions/:
    get:
      tags:
        - completions
      summary: returns completions
      description: |
        By passing in the appropriate options, you can get search completions
      operationId: searchCompletions
      deprecated: true
      parameters:
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: regionId
          in: query
          description: ID of region or city(optional)
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: query
          in: query
          required: true
          style: form
          explode: true
          schema:
            type: string
          example: microwave
        - name: userId
          in: query
          description: userId
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: ANY-USER-ID
        - name: searchId
          in: query
          description: id of search session
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: ANY-USER-ID
        - name: imagesSize
          in: query
          description: example string - {"width":10,"height":10}
          required: false
          schema:
            type: string
        - name: queryId
          in: query
          description: id of query
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: ANY-QUERY-ID
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchCompletions'
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
  /api/v2/{uuid}/completions:
    get:
      tags:
        - completions
      summary: returns completions
      description: |
        By passing in the appropriate options, you can get search completions
      operationId: searchCompletionsV2
      parameters:
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: regionId
          in: query
          description: ID of region or city(optional)
          required: false
          style: form
          explode: true
          schema:
            type: string
        - name: query
          in: query
          required: true
          style: form
          explode: true
          schema:
            type: string
          example: microwave
        - name: userId
          in: query
          description: userId
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: ANY-USER-ID
        - name: searchId
          in: query
          description: id of search session
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: ANY-USER-ID
        - name: imagesSize
          in: query
          description: example string - {"width":10,"height":10}
          required: false
          schema:
            type: string
        - name: queryId
          in: query
          description: id of query
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: ANY-QUERY-ID
        - name: completionSettings
          in: query
          required: false
          description: this parameter is a JSON object that allows you to flexibly manage the output of search completions
          content:
            application/json:
              schema:
                type: object
                properties:
                  totalCompletionCount:
                    type: integer
                    example: 12
                    description: total number of complete entities
                  orders:
                    type: array
                    description: |
                      Array defining the order of completions:
                      - popular - popular queries
                      - brands - product brands
                      - categories - product categories
                      - history - user history
                      - suggestions - suggested items
                      - offers - product offers
                      - special_offers - special product offers
                    items:
                      type: string
                      enum: ["popular", "categories", "brands", "history", "suggestions", "special_offers", "offers"]
                    example: ["popular", "categories", "brands", "history", "suggestions", "special_offers", "offers"]
                  limits:
                    type: object
                    description: limit on the number of entities for each type
                    properties:
                      brands:
                        type: integer
                        example: 3
                      offers:
                        type: integer
                        example: 12
                      history:
                        type: integer
                        example: 5
                      popular:
                        type: integer
                        example: 3
                      categories:
                        type: integer
                        example: 3
                      suggestions:
                        type: integer
                        example: 6
                      special_offers:
                        type: integer
                        example: 6
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchCompletionsV2'
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
  /api/{uuid}/history:
    delete:
      tags:
        - completions
      summary: removing history completions
      parameters:
        - name: uuid
          in: path
          description: UUId of datasource
          required: true
          style: simple
          explode: false
          schema:
            type: string
        - name: userId
          in: query
          description: userId
          required: false
          style: form
          explode: true
          schema:
            type: string
          example: ANY-USER-ID
        - name: completion
          in: query
          description: completion
          required: false
          style: form
          explode: true
          schema:
            type: string
      requestBody:
        description: removing history completions
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HistoryDelete'
      responses:
        "200":
          description: tracking result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrackResult'
        "400":
          description: bad input parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
        "500":
          description: server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
components:
  schemas:
    TrackResult:
      properties:
        status:
          type: string
          example: status string
        message:
          type: string
          example: Message string
    BadRequest:
      properties:
        message:
          type: string
          example: Shit happens
    CategoricalParam:
      type: object
      properties:
        id:
          type: string
          example: param-123
        hits:
          type: string
          description: How many hits will be avaialble if we disable that filter
          example: "57"
        name:
          type: string
          example: Weight
        type:
          type: string
          enum:
            - categorical
        options:
          type: array
          items:
            $ref: '#/components/schemas/CategoricalParam_options'
    RangeParam:
      type: object
      properties:
        id:
          type: string
          example: param-123
        name:
          type: string
          example: Weight
        type:
          type: string
          enum:
            - range
        maxValue:
          type: number
        minValue:
          type: number
    Param:
      type: object
      oneOf:
        - $ref: '#/components/schemas/RangeParam'
        - $ref: '#/components/schemas/CategoricalParam'
    Category:
      properties:
        id:
          type: integer
        name:
          type: string
          example: Bluetooth Headsets
        hits:
          type: integer
          description: number of hits in such category
          example: 300
    PostBody:
      properties:
        image:
          type: string
          example: base64 encoded image
    PostBodyCart:
      properties:
        user_id:
          type: string
          example: any user ID
        items:
          type: object
          example: [{"item_id": "any item ID","price": 1112345.67,"amount": 100500}]
          items:
            $ref: '#/components/schemas/CartItems'
    HistoryDelete:
      properties:
        userId:
          type: string
          example: any user ID
        completion:
          type: string
    SessionRequestElement:
      type: object
      properties:
        FeedbackType:
          type: string
        UserId:
          type: string
        Timestamp:
          type: string
        ItemId:
          type: string
        Comment:
          type: string
    AllContacts:
      type: array
      items:
        $ref: '#/components/schemas/Offer'
    Offer:
      properties:
        labels:
          type: array
          items:
            $ref: '#/components/schemas/Offer_labels'
        id:
          type: string
          example: "123"
        vendor:
          type: string
          example: Apple
        model:
          type: string
          example: XS-2
        typePrefix:
          type: string
          example: Mobile phone
        params:
          type: array
          items:
            $ref: '#/components/schemas/Offer_params'
        category:
          type: array
          items:
            $ref: '#/components/schemas/Offer_category'
        price:
          type: integer
          example: 10000
        currency:
          type: string
          example: RUB
        name:
          type: string
          example: Mobile Phone APPLE XS-2
        url:
          type: string
          format: url
          example: http://site.ru/offer
        pictures:
          type: array
          items:
            type: string
            format: url
            example: http://site.ru/images.jpg
        isPickup:
          type: boolean
          example: true
        isDelivery:
          type: boolean
          example: false
        isPreorder:
          type: boolean
          example: false
    SearchCompletions:
      type: object
      properties:
        searchbox:
          type: array
          items:
            $ref: '#/components/schemas/CompletionV2'
        tips:
          type: array
          items:
            $ref: '#/components/schemas/Tip'
        redirect:
          type: string
          nullable: true
          description: redirect link when applying the "Redirect User" merchandising rule
        hits:
          type: integer
    SearchCompletionsV2:
      type: object
      properties:
        searchbox:
          type: array
          items:
            $ref: '#/components/schemas/CompletionV2'
          description: |
            Automatically suggested options based on the request.
            Here, entities are displayed in accordance with the set ordering through the completionSettings.orders field
        tips:
          type: array
          items:
            $ref: '#/components/schemas/Tip'
        offers:
          type: array
          items:
            $ref: '#/components/schemas/Offer'
          description: it contains the most relevant offers that match your query
        extraOffers:
          type: array
          items:
            $ref: '#/components/schemas/Offer'
        redirect:
          type: string
          nullable: true
          description: redirect link when applying the "Redirect User" merchandising rule
        hits:
          type: integer
          example: 1
    Tip:
      type: object
      properties:
        label:
          type: string
        query:
          type: string
    Completion:
      type: object
      properties:
        label:
          type: string
          description: "type of suggestion(history,popular,suggestions,categories,brands,offers)"
        text:
          $ref: '#/components/schemas/Completion_text'
    CompletionV2:
      type: object
      properties:
        label:
          type: string
          enum: ["popular", "categories", "brands", "history", "suggestions", "special_offers", "offers"]
          description: "type of completion entity"
        text:
          type: object
          properties:
            html:
              type: string
            value:
              type: string
        id:
          type: string
          nullable: true
        count:
          type: integer
          nullable: true
        search:
          $ref: '#/components/schemas/CompletionSearch'
        snippet:
          type: string
          nullable: true
        offer:
          type: object
          properties:
            available:
              type: boolean
            offerLabelsTyped:
              type: array
              items:
                type: string
    CompletionText:
      type: object
      properties:
        html:
          type: string
          example: Apple <b>Iphone</b> XS
        value:
          type: string
          example: Доставка подарков
    CompletionSearch:
      required:
        - query
      type: object
      properties:
        query:
          type: string
        categoryId:
          type: string
        params:
          type: array
          description: Filter paramethers for smart-completions
          items:
            $ref: '#/components/schemas/CompletionsParam'
    CompletionsParam:
      type: array
      items:
        $ref: '#/components/schemas/CompletionsParam_inner'
    SearchData:
      required:
        - categories
        - hits
        - offers
        - params
        - suggestions
      type: object
      properties:
        hits:
          type: number
        topOffersIds:
          type: array
          description: "Id of the elements, found by articul(sku)"
          items:
            type: string
        params:
          type: array
          items:
            $ref: '#/components/schemas/Param'
        offers:
          type: array
          items:
            $ref: '#/components/schemas/Offer'
        categories:
          type: array
          items:
            $ref: '#/components/schemas/Category'
        suggestions:
          type: array
          items:
            type: string
            example: Xiaomi Earbuds
    SearchDataWithGropedByCategories:
      required:
        - categories
      type: object
      properties:
        categories:
          type: object
          properties:
            "3":
              $ref: '#/components/schemas/SearchData'
            "7":
              $ref: '#/components/schemas/SearchData'
            "9":
              $ref: '#/components/schemas/SearchData'
    groupByCategories:
      type: object
      properties:
        active:
          type: boolean
          description: enable or disable categories groupping
        limit:
          type: number
          description: limit number of categories in result
          example: 5
        size:
          type: number
          description: limit number of offers in category
          example: 3
        skip:
          type: number
          description: number of categories to skip(for pagination)
          example: 0
    groupByCategories_1:
      type: object
      properties:
        active:
          type: boolean
          description: enable or disable categories groupping
        limit:
          type: number
          description: limit number of categories in result
          example: 5
        size:
          type: number
          description: limit number of offers in category
          example: 3
        skip:
          type: number
          description: number of categories to skip(for pagination)
          example: 0
    WidgetAnalyticsRequest:
      type: object
      properties:
        userId:
          type: string
          example: "1-2-3"
        event:
          type: string
          example: "any event"
        widgetId:
          type: integer
          example: 123
    RecommendationRequest:
      type: object
      properties:
        feedback:
          type: string
          example: "any feedback"
        userId:
          type: string
          example: "1-2-3"
        itemId:
          type: string
          example: "4-5-6"
        comment:
          type: string
          example: "good news everyone"
        user_comment:
          type: string
          example: "bad news everyone"
        session_id:
          type: string
          example: "any_session_id"
        user_label:
          type: array
          items:
            type: string
            example: "android"
        user_subscribe:
          type: array
          items:
            type: string
            example: "cats"
    CategoricalParam_options:
      type: object
      properties:
        name:
          type: string
          example: 3G modem
        hits:
          type: integer
      example: null
    CartItems:
      type: object
      properties:
        item_id:
          type: string
          example: any item ID
        price:
          type: integer
          example: 12345.67
        amount:
          type: integer
          example: 100500
    Offer_labels:
      type: object
      properties:
        id:
          type: string
          example: sale
        icon:
          type: string
          example: saleIcon
        title:
          type: string
          example: Распродажа
      example: null
    Offer_params:
      type: object
      properties:
        param_name:
          type: string
          example: param_Weight=123
      example: null
    Offer_category:
      type: object
      properties:
        id:
          type: integer
          example: 123
        name:
          type: string
          example: mobile phones
      example: null
    Completion_text:
      required:
        - value
      type: object
      properties:
        value:
          type: string
          example: Apple Iphone XS
        id:
          type: number
          description: "if of category, brand or offer"
          example: 4
        price:
          type: number
          description: offer's price
          example: 350
        count:
          type: number
          description: number of offers(for category)
          example: 65
        url:
          type: string
          example: http://site.com/products/123
        image_url:
          type: string
          example: http://site.com/images/123.jpg
        text:
          $ref: '#/components/schemas/CompletionText'
        search:
          $ref: '#/components/schemas/CompletionSearch'
      example: null
    CompletionsParam_inner:
      type: object
      properties:
        condition:
          type: string
          example: in
        field:
          type: string
          example: vendor
        options:
          type: array
          items:
            type: string
            example: Samsung
  parameters:
    paramParam:
      name: params
      in: query
      required: false
      style: form
      explode: true
      schema:
        type: array
        items:
          oneOf:
            - type: object
              properties:
                field:
                  type: string
                  example: color
                condition:
                  type: string
                  example: in
                values:
                  type: array
                  items:
                    type: string
                    example: red
            - type: object
              properties:
                field:
                  type: string
                  example: color
                condition:
                  type: string
                  example: equal
                value:
                  type: string
                  example: red
            - type: object
              properties:
                field:
                  type: string
                  example: price
                condition:
                  type: string
                  example: range
                min:
                  type: number
                  example: 100
                max:
                  type: number
                  example: 1000