LilyApp Middleware API

The middleware API behind Lily AI's customer application at app.lily.ai. Publicly served with a Swagger UI at /api and an OpenAPI 3.0.0 contract at /api-json (63 paths, 100 operations, 41 schemas), covering retailer/subsidiary configuration, product search over Lily's consumer-centric attribute tags and synonyms, product analytics and search-term trends, AI product-copy generation and batch review, outbound partner integration configuration, and a set of pass-through proxies to Lily's internal product-intelligence, connector, config, TCE and enrichment-platform services. Calls require a bearer JWT issued by Lily AI's Azure AD B2C tenant; Lily AI publishes no developer documentation and offers no self-service way to obtain one.

Documentation

Specifications

Other Resources

OpenAPI Specification

lily-ai-lilyapp-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: LilyApp API - Nest Based Application
  description: Lily App Middleware
  version: '1.0'
  contact: {}
servers:
- url: https://lilyapp-api-prd.pub.lilyai.net
  description: Production (LilyApp-Api-Prod-AWS)
- url: https://lilyapp-api-stg.pub.lilyai.net
  description: Staging
paths:
  /health:
    get:
      operationId: HealthController_check
      parameters: []
      responses:
        '200':
          description: The Health Check is successful
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: ok
                  info:
                    type: object
                    example:
                      database:
                        status: up
                    additionalProperties:
                      type: object
                      properties:
                        status:
                          type: string
                      additionalProperties:
                        type: string
                    nullable: true
                  error:
                    type: object
                    example: {}
                    additionalProperties:
                      type: object
                      properties:
                        status:
                          type: string
                      additionalProperties:
                        type: string
                    nullable: true
                  details:
                    type: object
                    example:
                      database:
                        status: up
                    additionalProperties:
                      type: object
                      properties:
                        status:
                          type: string
                      additionalProperties:
                        type: string
        '503':
          description: The Health Check is not successful
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: error
                  info:
                    type: object
                    example:
                      database:
                        status: up
                    additionalProperties:
                      type: object
                      properties:
                        status:
                          type: string
                      additionalProperties:
                        type: string
                    nullable: true
                  error:
                    type: object
                    example:
                      redis:
                        status: down
                        message: Could not connect
                    additionalProperties:
                      type: object
                      properties:
                        status:
                          type: string
                      additionalProperties:
                        type: string
                    nullable: true
                  details:
                    type: object
                    example:
                      database:
                        status: up
                      redis:
                        status: down
                        message: Could not connect
                    additionalProperties:
                      type: object
                      properties:
                        status:
                          type: string
                      additionalProperties:
                        type: string
  /config/brands:
    get:
      operationId: ConfigController_getAllBrands
      parameters: []
      responses:
        '200':
          description: List all brands.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubsidiaryDto'
      security:
      - JWT: []
  /config/personproducttypes:
    get:
      operationId: ConfigController_getAllApis
      parameters: []
      responses:
        '200':
          description: List of Person Product Types.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PersonProductTypesDto'
      security:
      - JWT: []
  /config/retailer/info:
    get:
      operationId: ConfigController_getReailerInfo
      parameters:
      - name: subsidiaryCode
        required: true
        in: query
        schema:
          type: string
      responses:
        '200':
          description: Retrieve retailer info (requires authentication).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RetailerInfoDto'
      security:
      - JWT: []
  /config/subsidiary/details/{id}:
    get:
      operationId: ConfigController_getSubsidiaryDetails
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: List subsidiary details (requires authentication and authorization).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubsidiaryDto'
      security:
      - JWT: []
  /config/subsidiary/{param}:
    get:
      operationId: ConfigController_getSubsidiaryConfig
      parameters:
      - name: param
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: List subsidiary config details by ID or partner config details by subsidiary code
            (requires authentication).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubsidiaryDto'
      security:
      - JWT: []
  /config/users/{id}/brands:
    get:
      operationId: UsersController_listUserBrands
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: number
      responses:
        '200':
          description: Retrieve all the brands from a user.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BrandDto'
      security:
      - JWT: []
  /:
    get:
      operationId: HomeController_healthCheckRoot
      parameters: []
      responses:
        '200':
          description: ''
  /search:
    get:
      operationId: SearchPamController_getSearchDataForGallery
      parameters:
      - name: subsidiaryCode
        required: true
        in: query
        description: Code name for retailer. Required to check user permission for retailer.
        schema:
          default: terra
          type: string
      - name: page
        required: true
        in: query
        schema:
          type: string
      - name: per_page
        required: true
        in: query
        schema:
          type: string
      - name: retailer
        required: true
        in: query
        schema:
          type: string
      - name: brand
        required: true
        in: query
        schema:
          type: string
      - name: sku_id
        required: true
        in: query
        schema:
          type: string
      - name: product_types
        required: true
        in: query
        schema:
          type: string
      - name: person_types
        required: true
        in: query
        schema:
          type: string
      responses:
        '200':
          description: Retrieve all the products.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchOldResponseDto'
      security:
      - JWT: []
  /search/products:
    post:
      operationId: SearchPamController_getAllProductsFromPI
      parameters:
      - name: subsidiaryCode
        required: true
        in: query
        description: Code name for retailer. Required to check user permission for retailer.
        schema:
          default: terra
          type: string
      - name: pageNumber
        required: true
        in: query
        schema:
          default: '1'
          type: string
      - name: pageSize
        required: true
        in: query
        schema:
          default: '100'
          type: string
      - name: sortColumn
        required: true
        in: query
        schema:
          type: string
      - name: sortDirection
        required: true
        in: query
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchPAMPayloadDto'
      responses:
        '200':
          description: Retrieve all the PAM products.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductSearchDtoWithSynonyms'
      security:
      - JWT: []
  /search/products/export:
    post:
      operationId: SearchPamController_exportAllProductsFromPI
      parameters: []
      responses:
        '204':
          description: ''
  /search/products/tags{edit}:
    post:
      operationId: SearchPamController_updateProductTagsApi
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TagUpdatePayloadDto'
      responses:
        '200':
          description: Edit tags of a product.
      security:
      - JWT: []
  /search/products/filters/tableFormatted:
    get:
      operationId: SearchPamController_getFiltersTableFormattedLocalApi
      parameters:
      - name: subsidiaryCode
        required: true
        in: query
        description: Code name for retailer. Required to check user permission for retailer.
        schema:
          default: terra
          type: string
      responses:
        '200':
          description: Get db filters formatted as a table.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FilterContainerDto'
      security:
      - JWT: []
  /search/subsidiary/tags:
    get:
      operationId: SearchPamController_getPrductTagsFiltersList
      parameters:
      - name: subsidiaryCode
        required: true
        in: query
        description: Code name for retailer. Required to check user permission for retailer.
        schema:
          default: terra
          type: string
      responses:
        '200':
          description: Get db filters formatted as a table.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FilterContainerDto'
      security:
      - JWT: []
  /search/pi-analytics/meta:
    get:
      operationId: SearchAnalyticsController_getPIAnalyticsMeta
      parameters:
      - name: subsidiaryCode
        required: true
        in: query
        description: Code name for retailer. Required to check user permission for retailer.
        schema:
          default: terra
          type: string
      responses:
        '200':
          description: Get PI Analytics meta data.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PiAnalyticsMetaDto'
      security:
      - JWT: []
  /search/pi-analytics/{type}:
    get:
      operationId: SearchAnalyticsController_getPIAnalytics
      parameters:
      - name: type
        required: true
        in: path
        schema:
          type: string
          enum:
          - overview
          - trends
      - name: subsidiaryCode
        required: true
        in: query
        description: Code name for retailer. Required to check user permission for retailer.
        schema:
          default: terra
          type: string
      - name: restQueryParams
        required: false
        in: query
        schema:
          type: object
      - name: to_date
        required: false
        in: query
        schema:
          format: date
          type: string
      - name: from_date
        required: false
        in: query
        schema:
          format: date
          type: string
      - name: device_type
        required: false
        in: query
        schema:
          enum:
          - desktop
          - mweb
          - tablet
          - other
          type: string
      - name: visitor_type
        required: false
        in: query
        schema:
          enum:
          - new_visitor
          - repeated_visitor
          type: string
      - name: limit
        required: false
        in: query
        schema:
          type: number
      - name: offset
        required: false
        in: query
        schema:
          type: number
      - name: order
        required: false
        in: query
        schema:
          enum:
          - asc
          - desc
          type: string
      - name: metric
        required: false
        in: query
        schema:
          enum:
          - total_searches_rate
          - noresult_points
          - view_points
          type: string
      responses:
        '200':
          description: Get PI Analytics Data | PI Trends Data
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/PiAnalyticsTypeDto'
                - $ref: '#/components/schemas/PiTrendsDto'
      security:
      - JWT: []
  /search/tags/autocomplete:
    get:
      operationId: SearchTagsController_getProductTagAutocompleteApi
      parameters:
      - name: subsidiaryCode
        required: true
        in: query
        description: Code name for retailer. Required to check user permission for retailer.
        schema:
          default: terra
          type: string
      responses:
        '200':
          description: Get all the tags for Autocomplete.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CategoryDto'
      security:
      - JWT: []
  /search/tags/types:
    get:
      operationId: SearchTagsController_getPersonProductTypes
      parameters:
      - name: subsidiaryCode
        required: true
        in: query
        description: Code name for retailer. Required to check user permission for retailer.
        schema:
          default: terra
          type: string
      responses:
        '200':
          description: Get Person Product Types.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonProductTypesDto'
      security:
      - JWT: []
  /search/products/tags/autocomplete:
    get:
      operationId: SearchTagsController_getProductTagsList
      parameters:
      - name: subsidiaryCode
        required: true
        in: query
        description: Code name for retailer. Required to check user permission for retailer.
        schema:
          default: terra
          type: string
      responses:
        '200':
          description: Get all the tags for Autocomplete.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CategoryDto'
      security:
      - JWT: []
  /auth/b2c/login:
    get:
      operationId: AuthController_loginUserExt
      parameters: []
      responses:
        '200':
          description: Login a user using Azure Active Directory with B2C.
          content:
            application/json:
              schema:
                type: string
  /auth/microsoft/login:
    get:
      operationId: AuthController_loginUser
      parameters: []
      responses:
        '200':
          description: Login a user using Microsoft Azure.
          content:
            application/json:
              schema:
                type: string
  /productcopy/batches:
    get:
      operationId: ProductBatchesController_getAllProductCopyBatchesFromPI
      parameters:
      - name: subsidiaryID
        required: true
        in: query
        schema:
          default: 40
          type: number
      responses:
        '200':
          description: Retrieve all the Product Copy batches per retailer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductCopyBatches'
      security:
      - JWT: []
  /productcopy/batches/{id}:
    post:
      operationId: ProductBatchesController_getAllProductCopiesForBatch
      parameters:
      - name: id
        required: true
        in: path
        description: Batch's ID number
        schema:
          type: number
      - name: subsidiaryCode
        required: true
        in: query
        description: Code name for retailer. Required to check user permission for retailer.
        schema:
          default: terra
          type: string
      - name: pageNumber
        required: true
        in: query
        schema:
          default: '1'
          type: string
      - name: pageSize
        required: true
        in: query
        schema:
          default: '100'
          type: string
      - name: order
        required: false
        in: query
        description: The order in which the products are return in.
        schema:
          $ref: '#/components/schemas/ProductCopyStatus'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchProductCopyBodyDto'
      responses:
        '200':
          description: Retrieve all the Product Copy products for a concrete batch.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProductCopySearchDto'
      security:
      - JWT: []
  /productcopy/batches/export/{id}:
    post:
      operationId: ProductBatchesController_exportAllProductCopiesForBatch
      parameters:
      - name: id
        required: true
        in: path
        description: Batch's ID number
        schema:
          type: number
      - name: subsidiaryCode
        required: true
        in: query
        description: Code name for retailer. Required to check user permission for retailer.
        schema:
          default: terra
          type: string
      - name: pageNumber
        required: true
        in: query
        schema:
          default: '1'
          type: string
      - name: pageSize
        required: true
        in: query
        schema:
          default: '100'
          type: string
      - name: order
        required: false
        in: query
        description: The order in which the products are return in.
        schema:
          $ref: '#/components/schemas/ProductCopyStatus'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExportProductCopyBodyDto'
      responses:
        '200':
          description: Retrieve all the products in a batch for a Product Copy export.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProductCopySearchDto'
      security:
      - JWT: []
  /productcopy/batches/add:
    put:
      operationId: ProductBatchesController_createProductBatch
      parameters:
      - name: subsidiaryID
        required: true
        in: query
        description: ID for retailer. Required to check user permission for retailer.
        schema:
          default: '40'
          type: string
      - name: batchID
        required: false
        in: query
        description: Optional paramater. Can be added to reinstate a previously deleted batch or create
          a batch with a specific number.
        schema:
          type: number
      responses:
        '200':
          description: "Create a new batch with no products. Default behavior is create a new batch with\
            \ no products. \nAdding a batchID will create a new batch with that ID or reinstate a previously\
            \ deleted batch."
      security:
      - JWT: []
  /productcopy/batches/add/products/{id}:
    post:
      operationId: ProductBatchesController_createProductBatchCopiesAndProducts
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: number
      - name: subsidiaryID
        required: true
        in: query
        description: ID for retailer. Required to check user permission for retailer.
        schema:
          default: '40'
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/ProductCopyCopies'
      responses:
        '200':
          description: Add products to an exisiting batch
      security:
      - JWT: []
  /productcopy/batches/remove/{id}:
    delete:
      operationId: ProductBatchesController_deleteProductBatch
      parameters:
      - name: id
        required: true
        in: path
        description: Batch's ID number
        schema:
          type: number
      - name: subsidiaryID
        required: true
        in: query
        description: ID for retailer. Required to check user permission for retailer.
        schema:
          default: '40'
          type: string
      responses:
        '200':
          description: Delete existing batch.
      security:
      - JWT: []
  /productcopy/batches/remove/products/{id}:
    delete:
      operationId: ProductBatchesController_deleteProductBatchCopiesandProducts
      parameters:
      - name: id
        required: true
        in: path
        description: Batch's ID number
        schema:
          type: number
      - name: subsidiaryID
        required: true
        in: query
        description: ID for retailer. Required to check user permission for retailer.
        schema:
          default: '40'
          type: string
      responses:
        '200':
          description: Delete existing batch.
      security:
      - JWT: []
  /productcopy/products/details/{productId}:
    put:
      operationId: ProductCopyController_updateProductCopyDetails
      parameters:
      - name: productId
        required: true
        in: path
        schema:
          type: number
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductDetailsUpdatePayloadDto'
      responses:
        '200':
          description: Edit details of a product.
      security:
      - JWT: []
  /productcopy/products/details/tags/{productId}:
    get:
      operationId: ProductCopyController_getProductCopyDetails
      parameters:
      - name: productId
        required: true
        in: path
        schema:
          type: number
      - name: subsidiaryCode
        required: true
        in: query
        description: Code name for retailer. Required to check user permission for retailer.
        schema:
          default: terra
          type: string
      responses:
        '200':
          description: Get all tags for a product.
      security:
      - JWT: []
  /productcopy/products/status:
    put:
      operationId: ProductCopyController_updateProductCopyStatus
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductStatusUpdatePayloadDto'
      responses:
        '200':
          description: Edit status of a product.
      security:
      - JWT: []
  /productcopy/products/generate/{productId}:
    post:
      operationId: ProductCopyController_generateDescription
      parameters:
      - name: productId
        required: true
        in: path
        description: Request to record search, but not for results. Any number can be used.
        schema:
          type: number
      - name: subsidiaryCode
        required: true
        in: query
        description: Code name for retailer. Required to check user permission for retailer.
        schema:
          default: terra
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DescriptionGenerationPayloadData'
      responses:
        '200':
          description: Generate a new description of a product
      security:
      - JWT: []
  /productcopyV2/products/details/{productId}:
    put:
      operationId: ProductCopyControllerV2_updateProductCopyDetails
      parameters:
      - name: productId
        required: true
        in: path
        schema:
          type: number
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductDetailsUpdatePayloadDto'
      responses:
        '200':
          description: Edit details of a product.
      security:
      - JWT: []
  /productcopyV2/products/details/tags/{productId}:
    get:
      operationId: ProductCopyControllerV2_getProductCopyTags
      parameters:
      - name: productId
        required: true
        in: path
        schema:
          type: number
      - name: subsidiaryCode
        required: true
        in: query
        description: Code name for retailer. Required to check user permission for retailer.
        schema:
          default: terra
          type: string
      responses:
        '200':
          description: Get all tags for a product.
      security:
      - JWT: []
  /productcopyV2/products/details/images/{productId}:
    get:
      operationId: ProductCopyControllerV2_getProductCopyImages
      parameters:
      - name: productId
        required: true
        in: path
        schema:
          type: number
      - name: subsidiaryCode
        required: true
        in: query
        description: Code name for retailer. Required to check user permission for retailer.
        schema:
          default: terra
          type: string
      responses:
        '200':
          description: Get all tags for a product.
      security:
      - JWT: []
  /productcopyV2/products/status/{productId}:
    put:
      operationId: ProductCopyControllerV2_updateProductCopyStatus
      parameters:
      - name: productId
        required: true
        in: path
        schema:
          type: number
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductStatusUpdatePayloadDto'
      responses:
        '200':
          description: Edit status of a product.
      security:
      - JWT: []
  /productcopyV2/batches:
    get:
      operationId: ProductBatchesControllerV2_getAllProductCopyBatchesFromPI
      parameters:
      - name: subsidiaryCode
        required: true
        in: query
        description: Code name for retailer. Required to check user permission for retailer.
        schema:
          default: terra
          type: string
      - name: pageNumber
        required: true
        in: query
        schema:
          type: string
      - name: pageSize
        required: true
        in: query
        schema:
          type: string
      responses:
        '200':
          description: Retrieve all the PAM product batches.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductCopyBatches'
      security:
      - JWT: []
  /productcopyV2/batches/{id}:
    post:
      operationId: ProductBatchesControllerV2_getAllProductCopiesForBatch
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: number
      - name: subsidiaryCode
        required: true
        in: query
        description: Code name for retailer. Required to check user permission for retailer.
        schema:
          default: terra
          type: string
      - name: pageNumber
        required: true
        in: query
        schema:
          default: '1'
          type: string
      - name: pageSize
        required: true
        in: query
        schema:
          default: '100'
          type: string
      - name: order
        required: false
        in: query
        description: The order in which the products are return in.
        schema:
          $ref: '#/components/schemas/ProductCopyStatus'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchProductCopyBodyDto'
      responses:
        '200':
          description: Retrieve all the PAM products for a concrete batch.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProductCopySearchDtoV2'
      security:
      - JWT: []
    delete:
      operationId: ProductBatchesControllerV2_deleteProductBatch
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: number
      responses:
        '200':
          description: Delete existing batch.
      security:
      - JWT: []
  /batch/ingestions/{subsidiaryId}:
    get:
      operationId: BatchController_listAllBatches
      parameters:
      - name: subsidiaryId
        required: true
        in: path
        schema:
          type: number
      responses:
        '200':
          description: Get batches for subsidiary
      security:
      - JWT: []
  /products/search/synonyms:
    post:
      operationId: ProductController_searchProductsWithSynonyms
      parameters:
      - name: subsidiaryCode
        required: true
        in: query
        schema:
          type: string
      - name: sortColumn
        required: true
        in: query
        schema:
          type: string
      - name: sortDirection
        required: true
        in: query
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductSearchSynonymsRequestBodyDto'
      responses:
        '200':
          description: Get the list of all products with the synonyms based on search criteria.
      security:
      - JWT: []
  /integration/partners/{subsidiaryCode}:
    get:
      operationId: IntegrationController_listAllBatches
      parameters:
      - name: subsidiaryCode
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: Get partners for subsidiary
      security:
      - JWT: []
  /integration/partners/connection-information/{subsidiaryCode}/{partnerCode}:
    post:
      operationId: IntegrationController_configurePartner
      parameters:
      - name: subsidiaryCode
        required: true
        in: path
        schema:
          type: string
      - name: partnerCode
        required: true
        in: path
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConfigurePartnerPayload'
      responses:
        '200':
          description: Configure partner with subsidiary
      security:
      - JWT: []
  /pi-api-proxy/*:
    get:
      operationId: PiApiProxyController_proxy_get
      parameters:
      - name: subsidiary-id
        required: true
        in: header
        schema:
          type: string
      responses:
        '200':
          description: ''
      security:
      - JWT: []
    post:
      operationId: PiApiProxyController_proxy_post
      parameters:
      - name: subsidiary-id
        required: true
        in: header
        schema:
          type: string
      responses:
        '200':
          description: ''
      security:
      - JWT: []
    put:
      operationId: PiApiProxyController_proxy_put
      parameters:
      - name: subsidiary-id
        require

# --- truncated at 32 KB (66 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/lily-ai/refs/heads/main/openapi/lily-ai-lilyapp-api-openapi.yml