Lokki Products API

The Products API from Lokki — 34 operation(s) for products.

Operations 35

DELETE /v2/products/delete/{id} #
POST /v2/products/create-product #
POST /v2/products/unarchive-subproduct/{productId}/{subProductId} #
GET /v2/products/byId/{id} #
GET /v2/products/subProduct/{subProductId} #
GET /v2/products/subProductsByProductName/{name}/{startDate}/{endDate} #
GET /v2/products/bySerialNumber/{serialNumber}/{startDate}/{endDate} #
GET /v2/products/subProduct/qrCode/{qrCodeValue} #
GET /v2/products/getByCompany #
GET /v2/products/getByCompanyLLD #
GET /v2/products/productModels #
GET /v2/products/managingPlace/productModels #
GET /v2/products/admin/byProductCategory/{productCategoryId} #
POST /v2/products/create-product-model #
DELETE /v2/products/delete-product-model/{productModelId} #
POST /v2/products/duplicate-product-model/{productModelId} #
POST /v2/products/duplicate-product/{productId} #
POST /v2/products/update-product-model #
GET /v2/products/byProductModelId/{id} #
GET /v2/products/productModelById/{id} #
GET /v2/products/product-models #
GET /v2/products/getProductsInsuranceInfo #
GET /v2/products/enriched-infos/{productId}/{rentalType} #
POST /v2/products/itemsQrCodePdf #
POST /v2/products/sendLokkiQrCodePdf #
POST /v2/products/qrcodePdf #
POST /v2/products/subProductWithoutEvents #
GET /v2/products/tulip/{lokkiProductId} #
POST /v2/products/tulip/register/{productId} #
POST /v2/products/tulip/softDelete/{productId} #
PUT /v2/products/updateCategoryAvailability #
POST /v2/products/setUnavailabilityDates/{rentalType}/{productId}/{subProductId} #
PATCH /v2/products/{id} #
PUT /v2/products/{id} #
PATCH /v2/products #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/lokki-products-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

lokki-products-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Lokki Products API
  description: The main API powering the Lokki Dashboard and Online Store
  version: '2.0'
  contact: {}
servers: []
security:
- x-access-token: []
tags:
- name: Products
paths:
  /v2/products/delete/{id}:
    delete:
      operationId: deleteProductById
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
      tags:
      - Products
  /v2/products/create-product:
    post:
      operationId: createProduct
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateUpdateProductDto'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
      tags:
      - Products
  /v2/products/unarchive-subproduct/{productId}/{subProductId}:
    post:
      operationId: unarchiveSubProduct
      parameters:
      - name: productId
        required: true
        in: path
        schema:
          type: string
      - name: subProductId
        required: true
        in: path
        schema:
          type: string
      responses:
        '201':
          description: ''
      tags:
      - Products
  /v2/products/byId/{id}:
    get:
      operationId: getProductById
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
      tags:
      - Products
  /v2/products/subProduct/{subProductId}:
    get:
      operationId: getSubProductById
      parameters:
      - name: subProductId
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetSubProductIdResponse'
      tags:
      - Products
  /v2/products/subProductsByProductName/{name}/{startDate}/{endDate}:
    get:
      operationId: getSubProductsByProductName
      parameters:
      - name: name
        required: true
        in: path
        schema:
          type: string
      - name: startDate
        required: true
        in: path
        schema:
          format: date-time
          type: string
      - name: endDate
        required: true
        in: path
        schema:
          format: date-time
          type: string
      - name: currentOrderId
        required: false
        in: query
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GetSubProductIdResponse'
      tags:
      - Products
  /v2/products/bySerialNumber/{serialNumber}/{startDate}/{endDate}:
    get:
      operationId: getSubProductsBySerialNumber
      parameters:
      - name: serialNumber
        required: true
        in: path
        schema:
          type: string
      - name: startDate
        required: true
        in: path
        schema:
          format: date-time
          type: string
      - name: endDate
        required: true
        in: path
        schema:
          format: date-time
          type: string
      - name: currentOrderId
        required: false
        in: query
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GetSubProductIdResponse'
      tags:
      - Products
  /v2/products/subProduct/qrCode/{qrCodeValue}:
    get:
      operationId: getSubProductByExternalQrCode
      parameters:
      - name: qrCodeValue
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetSubProductIdResponse'
      tags:
      - Products
  /v2/products/getByCompany:
    get:
      operationId: getCompanyProducts
      parameters: []
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Product'
      tags:
      - Products
  /v2/products/getByCompanyLLD:
    get:
      operationId: getCompanyLLDProducts
      parameters: []
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Product'
      tags:
      - Products
  /v2/products/productModels:
    get:
      operationId: getCompanyProductModels
      parameters: []
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductModelList'
      tags:
      - Products
  /v2/products/managingPlace/productModels:
    get:
      operationId: getManagingPlaceProductModels
      parameters: []
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetByManagingPlaceProductModelsDto'
      tags:
      - Products
  /v2/products/admin/byProductCategory/{productCategoryId}:
    get:
      operationId: getProductModelsByVerticaleCategory
      parameters:
      - name: productCategoryId
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductModelList'
      tags:
      - Products
  /v2/products/create-product-model:
    post:
      operationId: createProductModel
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProductModelDto'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductModelDto'
      tags:
      - Products
  /v2/products/delete-product-model/{productModelId}:
    delete:
      operationId: deleteProductModel
      parameters:
      - name: productModelId
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: ''
      tags:
      - Products
  /v2/products/duplicate-product-model/{productModelId}:
    post:
      operationId: duplicateProductModel
      parameters:
      - name: productModelId
        required: true
        in: path
        schema:
          type: string
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                type: object
      tags:
      - Products
  /v2/products/duplicate-product/{productId}:
    post:
      operationId: duplicateProductById
      parameters:
      - name: productId
        required: true
        in: path
        schema:
          type: string
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                type: object
      tags:
      - Products
  /v2/products/update-product-model:
    post:
      operationId: updateProductModel
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateProductModelDto'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductModel'
      tags:
      - Products
  /v2/products/byProductModelId/{id}:
    get:
      operationId: getProductsByProductModel
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductList'
      tags:
      - Products
  /v2/products/productModelById/{id}:
    get:
      operationId: getProductModelByProductModelId
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductModelDto'
      tags:
      - Products
  /v2/products/product-models:
    get:
      operationId: listCompanyProductModels
      parameters: []
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProductModelDto'
      tags:
      - Products
  /v2/products/getProductsInsuranceInfo:
    get:
      operationId: getProductsInsuranceInfo
      parameters:
      - name: productIds
        required: true
        in: query
        schema:
          type: array
          items:
            type: string
      - name: startDate
        required: true
        in: query
        schema:
          type: string
      - name: endDate
        required: true
        in: query
        schema:
          type: string
      - name: isLLD
        required: true
        in: query
        schema:
          type: boolean
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetTulipProductInsuranceInfoResponseDto'
      tags:
      - Products
  /v2/products/enriched-infos/{productId}/{rentalType}:
    get:
      operationId: getEnrichedInfosByProductId
      parameters:
      - name: productId
        required: true
        in: path
        schema:
          type: string
      - name: rentalType
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrichedProductInfo'
      tags:
      - Products
  /v2/products/itemsQrCodePdf:
    post:
      operationId: getItemsQrCodePDF
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QrCodeItemsDto'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QrCodePdfDto'
      tags:
      - Products
  /v2/products/sendLokkiQrCodePdf:
    post:
      operationId: sendQrCodePdfToLokki
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SendQrCodePdfToLokkiDto'
      responses:
        '201':
          description: ''
      tags:
      - Products
  /v2/products/qrcodePdf:
    post:
      operationId: getSubProductQrCodePDF
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QrCodeSubsDto'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QrCodePdfDto'
      tags:
      - Products
  /v2/products/subProductWithoutEvents:
    post:
      operationId: getSubProductsWithoutEventHistory
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GetSubProductsWithoutEvent'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
      tags:
      - Products
  /v2/products/tulip/{lokkiProductId}:
    get:
      operationId: getTulipProduct
      parameters:
      - name: lokkiProductId
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TulipProduct'
      tags:
      - Products
  /v2/products/tulip/register/{productId}:
    post:
      operationId: registerTulipProduct
      parameters:
      - name: productId
        required: true
        in: path
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterTulipProductDto'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TulipProduct'
      tags:
      - Products
  /v2/products/tulip/softDelete/{productId}:
    post:
      operationId: softDeleteTulipProduct
      parameters:
      - name: productId
        required: true
        in: path
        schema:
          type: string
      responses:
        '201':
          description: ''
      tags:
      - Products
  /v2/products/updateCategoryAvailability:
    put:
      operationId: updateProductCategoryAvailability
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateProductCategoryAvailabilityDto'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
      tags:
      - Products
  /v2/products/setUnavailabilityDates/{rentalType}/{productId}/{subProductId}:
    post:
      operationId: setProductUnavailabilityDates
      parameters:
      - name: rentalType
        required: true
        in: path
        schema:
          type: string
      - name: productId
        required: true
        in: path
        schema:
          type: string
      - name: subProductId
        required: true
        in: path
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetProductUnavailabilityDatesBodyDto'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SetProductUnavailabilityDatesResponseDto'
      tags:
      - Products
  /v2/products/{id}:
    patch:
      operationId: patchOneProduct
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchProductDto'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
      tags:
      - Products
    put:
      operationId: putOneProduct
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PutProductDto'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
      tags:
      - Products
  /v2/products:
    patch:
      operationId: patchManyProduct
      parameters:
      - name: ids
        required: true
        in: query
        schema:
          type: array
          items:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchProductDto'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Product'
      tags:
      - Products
components:
  schemas:
    EnrichedSubProductHistoryEventCustomer:
      type: object
      properties:
        companyName:
          type: string
        firstName:
          type: string
        lastName:
          type: string
      required:
      - companyName
      - firstName
      - lastName
    HistoryInspectionField:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        answers:
          type: array
          items:
            $ref: '#/components/schemas/HistoryInspectionAnswer'
      required:
      - id
      - name
      - answers
    AttachedFile:
      type: object
      properties:
        name:
          type: string
        key:
          type: string
        size:
          type: number
        type:
          type: string
        uid:
          type: string
      required:
      - name
      - key
      - size
      - type
    PriceModelLLDDuration:
      type: object
      properties:
        type:
          type: string
          default: LLD
          enum:
          - LLD
        calendarMonths:
          type: number
        id:
          type: string
        price:
          type:
          - number
          - 'null'
        priceLowSeason:
          type:
          - number
          - 'null'
        label:
          $ref: '#/components/schemas/LocalizedContent'
      required:
      - type
      - calendarMonths
      - id
      - price
      - priceLowSeason
      - label
    PutProductDto:
      type: object
      properties:
        priceModels:
          type: array
          items:
            oneOf:
            - $ref: '#/components/schemas/PriceModelSpecificDuration'
            - $ref: '#/components/schemas/PriceModelRangeDuration'
            - $ref: '#/components/schemas/PriceModelLLDDuration'
        name:
          type: string
        rentalType:
          type: string
          enum:
          - LCD
          - LLD
        fields:
          type: array
          items:
            $ref: '#/components/schemas/ProductField'
        imageUrl:
          type: array
          items:
            type: string
        videoLink:
          type: string
        attachedFiles:
          type: array
          items:
            $ref: '#/components/schemas/AttachedFile'
        rank:
          type: number
        bailPrice:
          type: number
        onlineStoreInformation:
          type: object
          properties:
            name:
              required: true
              $ref: '#/components/schemas/LocalizedContent'
            description:
              required: true
              $ref: '#/components/schemas/LocalizedContent'
        priceRule:
          allOf:
          - $ref: '#/components/schemas/ProductPriceRule'
        productModel:
          type: string
        relatedProducts:
          type: array
          items:
            type: string
        isRelatedProduct:
          type: boolean
        productSurveyId:
          type: string
        productStateId:
          type: string
        hideOnOnlineStore:
          type: boolean
        attributes:
          type: array
          items:
            $ref: '#/components/schemas/ProductAttribute'
        vat:
          type: number
        insurance:
          $ref: '#/components/schemas/ProductInsurance'
        isSubProduct:
          type: boolean
        onlineAvailability:
          type: boolean
        displaySubProducts:
          type: boolean
        number:
          type: number
        inspectionReports:
          type: boolean
        subProducts:
          type: array
          items:
            $ref: '#/components/schemas/SubProductDto'
        verticalCategoryId:
          type: string
        translationInProgress:
          type: boolean
      required:
      - priceModels
      - name
      - rentalType
      - fields
      - imageUrl
      - videoLink
      - attachedFiles
      - rank
      - bailPrice
      - onlineStoreInformation
      - priceRule
      - productModel
      - relatedProducts
      - isRelatedProduct
      - productSurveyId
      - productStateId
      - hideOnOnlineStore
      - attributes
      - vat
      - insurance
      - isSubProduct
      - onlineAvailability
      - displaySubProducts
      - number
      - inspectionReports
      - subProducts
    EnrichedProductInfo:
      type: object
      properties:
        turnover:
          type: number
        profitability:
          type: number
        orderNumber:
          type: number
        subProducts:
          type: array
          items:
            $ref: '#/components/schemas/EnrichedSubProductInfo'
      required:
      - turnover
      - profitability
      - orderNumber
      - subProducts
    QrCodeSubInfoDto:
      type: object
      properties:
        productName:
          type: string
        serialNumber:
          type: string
        productId:
          type: string
        subProductId:
          type: string
      required:
      - productName
      - serialNumber
      - productId
      - subProductId
    PatchProductDto:
      type: object
      properties:
        rentalType:
          enum:
          - LCD
          - LLD
          type: string
        fields:
          type: array
          items:
            $ref: '#/components/schemas/ProductField'
        imageUrl:
          type: array
          items:
            type: string
        videoLink:
          type: string
        attachedFiles:
          type: array
          items:
            $ref: '#/components/schemas/AttachedFile'
        rank:
          type: number
        bailPrice:
          type: number
        onlineStoreInformation:
          $ref: '#/components/schemas/ItemOnlineStoreInformation'
        priceRule:
          allOf:
          - $ref: '#/components/schemas/ProductPriceRule'
        name:
          type: string
        productModel:
          type: string
        relatedProducts:
          type: array
          items:
            type: string
        isRelatedProduct:
          type: boolean
        productSurveyId:
          type: string
        productStateId:
          type: string
        hideOnOnlineStore:
          type: boolean
        vat:
          type: number
        subProducts:
          type: array
          items:
            $ref: '#/components/schemas/SubProduct'
        insurance:
          $ref: '#/components/schemas/ProductInsurance'
        displaySubProducts:
          type: boolean
        priceModels:
          type: array
          items:
            type: object
        inspectionReports:
          type: boolean
        isSubProduct:
          type: boolean
        number:
          type: number
        onlineAvailability:
          type: boolean
    CreateUpdateProductModelLLDPriceDto:
      type: object
      properties:
        type:
          type: string
        id:
          type: string
        label:
          $ref: '#/components/schemas/LocalizedContent'
        calendarMonths:
          type: number
      required:
      - type
      - label
      - calendarMonths
    GetSubProductsWithoutEvent:
      type: object
      properties:
        productId:
          type: string
        eventName:
          type: string
      required:
      - productId
      - eventName
    SetProductUnavailabilityDatesResponseDto:
      type: object
      properties:
        modifiedOrders:
          type: array
          items:
            $ref: '#/components/schemas/SetProductUnavailabilityDatesOrderInfoDto'
        erroredOrders:
          type: array
          items:
            $ref: '#/components/schemas/SetProductUnavailabilityDatesOrderInfoDto'
        inprogressOrders:
          type: array
          items:
            $ref: '#/components/schemas/SetProductUnavailabilityDatesOrderInfoDto'
      required:
      - modifiedOrders
      - erroredOrders
      - inprogressOrders
    CustomerSkisetInfos:
      type: object
      properties:
        customerId:
          type:
          - string
          - 'null'
      required:
      - customerId
    ProductModelList:
      type: object
      properties:
        productModels:
          type: array
          items:
            $ref: '#/components/schemas/ProductModel'
      required:
      - productModels
    ItemAttribute:
      type: object
      properties:
        attribute:
          type: string
        tags:
          type: array
          items:
            type: string
      required:
      - attribute
      - tags
    ProductField:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        value:
          type: string
        isTagged:
          type: boolean
      required:
      - id
      - name
      - value
      - isTagged
    HistoryAttachedFile:
      type: object
      properties:
        name:
          type: string
        key:
          type: string
        size:
          type: number
        type:
          type: string
        url:
          type: string
      required:
      - name
      - key
      - size
      - type
    ProductModelField:
      type: object
      properties:
        id:
          type: string
        value:
          type: string
      required:
      - id
      - value
    SubProduct:
      type: object
      properties:
        id:
          type: string
        isAvailable:
          type: boolean
        printed:
          type: boolean
        serialNumber:
          type: string
        archive:
          type: boolean
        externalQrCode:
          type: string
        notAvailableRanges:
          type: array
          items:
            $ref: '#/components/schemas/NotAvailableRange'
      required:
      - id
      - isAvailable
      - printed
      - serialNumber
      - archive
      - externalQrCode
      - notAvailableRanges
    QrCodeItemsServiceInfoDto:
      type: object
      properties:
        type:
          type: string
          default: service
          enum:
          - service
        itemId:
          type: string
        name:
          type: string
      required:
      - type
      - itemId
      - name
    CreateUpdateProductModelPriceDto:
      type: object
      properties:
        type:
          type: string
        id:
          type: string
        label:
          $ref: '#/components/schemas/LocalizedContent'
        time:
          type: number
        timeMinutes:
          type: number
      required:
      - type
      - label
      - time
      - timeMinutes
    CustomerField:
      type: object
      properties:
        label:
          $ref: '#/components/schemas/LocalizedContent'
        value:
          type: string
        id:
          type: string
      required:
      - label
      - value
      - id
    PriceModelRangeDuration:
      type: object
      properties:
        type:
          type: string
          default: range
          enum:
          - range
        minDuration:
          type: number
        maxDuration:
          type: number
        durationInDays:
          type: number
        id:
          type: string
        price:
          type:
          - number
          - 'null'
        priceLowSeason:
          type:
          - number
          - 'null'
        label:
          $ref: '#/components/schemas/LocalizedContent'
      required:
      - type
      - minDuration
      - maxDuration
      - id
      - price
      - priceLowSeason
      - label
    QrCodeItemsProductInfoDto:
      type: object
      properties:
        type:
          type: string
          default: product
          enum:
          - product
        itemId:
          type: string
        name:
          type: string
        subProductId:
          type: string
        serialNumber:
          type: string
      required:
      - type
      - itemId
      - name
      - subProductId
      - serialNumber
    TulipInfos:
      type: object
      properties:
        address:
          type: string
        zipcode:
          type: string
        city:
          type: string
        managerFirstName:
          type: string
        managerLastName:
          type: string
        sirenNumber:
          type: string
      required:
      - address
      - zipcode
      - city
      - managerFirstName
      - managerLastName
      - sirenNumber
    EventOptions:
      type: object
      properties:
        unavailable:
          type: boolean
      required:
      - unavailable
    ProductModelsByCompany:
      type: object
      properties:
        companyId:
          type: string
        productModels:
          type: array
          items:
            $ref: '#/components/schemas/ProductModel'
      required:
      - companyId
      - productModels
    TentativeCategorization:
      type: object
      properties:
        subcategoryName:
          type:
          - string
          - 'null'
        verticalName:
          type:
          - string
          - 'null'
      required:
      - subcategoryName
      - verticalName
    OrderPackCategory:
      type: object
      properties:
        id:
          type: string
        value:
          type: string
      required:
      - id
      - value
    ProductModelLLDPrice:
      type: object
      properties:
        type:
          type: string
          default: LLD
          enum:
          - LLD
        label:
          $ref: '#/components/schemas/LocalizedContent'
        calendarMonths:
          type: number
        id:
          type: string
      required:
      - type
      - label
      - calendarMonths
      - id
    QrCodeSubsDto:
      type: object
      properties:
        subInfo:
          type: array
          items:
            $ref: '#/components/schemas/QrCodeSubInfoDto'
      required:
      - subInfo
    GetTulipProductInsuranceInfoResponseDto:
      type: object
      properties:
        productsInsuranceInfo:
          type: array
          items:
            $ref: '#/components/schemas/ProductInsuranceInfo'
        isProductAllowForInsurance:
          type: boolean
      required:
      - productsInsuranceInfo
      - isProductAllowForInsurance
    QrCodePdfDto:
      type: object
      properties:
        url:
          type: string
      required:
      - url
    ProductPriceRule:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        rules:
          type: array
          items:
            $ref: '#/components/schemas/PriceRule'
      required:
      - id
      - title
      - rules
    ProductList:
      type: object
      properties:
        products:
          type: array
          items:
            $ref: '#/components/schemas/Product'
      required:
      - products
    SubProductDto:
      type: object
      properties:
        id:
          type: string
        isAvailable:
          type: boolean
        printed:
          type: boolean
        serialNumber:
          type: string
        archive:
          type: boolean
        externalQrCode:
          type: string
        notAvailableRanges:
          type: array
          items:
            $ref: 

# --- truncated at 32 KB (60 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/lokki/refs/heads/main/openapi/lokki-products-api-openapi.yml