swagger: "2.0"
info:
  description: >-
    Rules management can be used for configuring, reading, deleting and updating rules. It was mainly designed for the OI Rules wizard, but allows other applications to directly manage rules by calling the respective endpoints.

        A rule is always defined for several assets of one asset type and includes a list of evaluations. An evaluation is an expression which evaluates to true or false. If all evaluations evaluate to true for the properties of one asset, all active actions included in the rule are being triggered if the rule itself is active.
          An evaluation includes a property (which reflects an aspect variable), a condition and comparative values. They can also include additional instructions called "hysteresis" and "debouncing" in order to define handling spikes or other timeseries anomalies.
  version: "4.0.0"
  title: Rules Management API
  x-visibility: "external"
basePath: /api/rulesmanagement/v4
schemes:
  - https
securityDefinitions:
  rules:
    type: oauth2
    flow: accessCode
    authorizationUrl: "https://oauth.simple.api/authorization"
    tokenUrl: "https://oauth.simple.api/token"
    scopes:
      rules.r: read rules
      rules.c: create rules
      rules.u: update rules
      rules.d: delete rules
tags:
  - name: "rules"
    description: Rules management
paths:
  /rules:
    get:
      operationId: getRules
      tags:
        - rules
      summary: Get a list of rules
      description: >-
        Get rules according to the provided query parameters.
      parameters:
        - in: query
          name: filter
          description: >-
            Filter as JSON object with supported fields assetType (string), active (boolean).
            Including the field assetType with a valid asset type as value will filter all rules for this asset type. Including the field active with a boolean value will filter active or inactive rules.
          required: false
          type: string
        - in: query
          name: size
          description: The maximum number of rules returned on each page. Defaults to 20 rules per page if parameter is not provided. Maximum value is limited to 200.
          required: false
          type: integer
        - in: query
          name: page
          description: Zero based index of requested page. Page 0 is returned by default if parameter is not provided.
          required: false
          type: integer

      security:
        - rules:
            - rules.r
      produces:
        - application/json
      responses:
        "200":
          description: A list of rules
          schema:
            $ref: "#/definitions/RuleListPage"
        "400":
          description: Bad request.
          schema:
            $ref: "#/definitions/FilterNotReadable"
        "401":
          description: Unauthorized
          schema:
            $ref: "#/definitions/Unauthorized"
        "403":
          description: Forbidden (missing scope)
          schema:
            $ref: "#/definitions/Forbidden"
        "500":
          description: Internal server error
          schema:
            $ref: "#/definitions/InternalServerError"
    post:
      operationId: createRule
      tags:
        - rules
      summary: Add a new rule
      description: Add a new rule for a selection of assets of one asset type. The body of the request contains the rule definition.
      parameters:
        - in: body
          name: rule definition
          description: rule definition including rule parameters, evaluations and actions
          required: true
          schema:
            $ref: "#/definitions/CreateRuleRequestBody"
      security:
        - rules:
            - rules.c
      consumes:
        - application/json
      produces:
        - application/json
      responses:
        "201":
          description: New rule created
          schema:
            $ref: "#/definitions/CreateRuleResponseBody"
        "400":
          description: Bad request (wrong schema of rule)
          schema:
            $ref: "#/definitions/ParameterError"
        "401":
          description: Unauthorized
          schema:
            $ref: "#/definitions/Unauthorized"
        "402":
          description: Number of active rules or total number of rules for the asset type exeeds limit.
          schema:
            $ref: "#/definitions/RuleCannotBeActivated"
        "403":
          description: Forbidden
          schema:
            $ref: "#/definitions/Forbidden"
  /rules/{ruleId}:
    get:
      operationId: getRule
      tags:
        - rules
      summary: Get rule by ID
      description: >-
        Retrieve the rule based on the specified parameter `ruleID`.
      security:
        - rules:
            - rules.r
      parameters:
        - name: ruleId
          in: path
          description: ID of rule that needs to be returned
          required: true
          type: string
      produces:
        - application/json
      responses:
        "200":
          description: A single rule definition
          schema:
            $ref: "#/definitions/RulePage"
        "400":
          description: Bad request.
          schema:
            $ref: "#/definitions/RuleIdHasWrongFormat"
        "401":
          description: Unauthorized
          schema:
            $ref: "#/definitions/Unauthorized"
        "403":
          description: Forbidden (missing scope)
          schema:
            $ref: "#/definitions/Forbidden"
        "404":
          description: Rule not found.
          schema:
            $ref: "#/definitions/RuleNotFound"
        "500":
          description: Internal server error
          schema:
            $ref: "#/definitions/InternalServerError"
    delete:
      operationId: deleteRule
      tags:
        - rules
      summary: Delete a single rule
      description: >-
        Delete the rule with the specified parameter `ruleID`.
      parameters:
        - name: ruleId
          in: path
          description: ID of rule that needs to be deleted
          required: true
          type: string
      produces:
        - text/plain
      responses:
        "204":
          description: Rule deleted
        "400":
          description: Bad request (rule with rule ID is not found)
          schema:
            $ref: "#/definitions/RuleIdHasWrongFormat"
        "401":
          description: Unauthorized
          schema:
            $ref: "#/definitions/Unauthorized"
        "403":
          description: Forbidden (missing scope)
          schema:
            $ref: "#/definitions/Forbidden"
        "404":
          description: Rule not found.
          schema:
            $ref: "#/definitions/RuleNotFound"
        "500":
          description: Internal server error
          schema:
            $ref: "#/definitions/InternalServerError"
    put:
      operationId: updateRule
      tags:
        - rules
      summary: Update existing rule
      description: |
        Update the rule with id `ruleId`.
        Properties present in the request body are utilized to update the addressed rule.
        The response contains the updated rule.
        **Attention&#58;** Any modification may cause a restart of the rule evaluation.
      security:
        - rules:
            - rules.u
      parameters:
        - in: path
          name: ruleId
          description: ID of rule that needs to be updated
          required: true
          type: string
        - in: body
          name: rule definition
          description: rule definition including rule parameters, evaluations and actions
          required: true
          schema:
            $ref: "#/definitions/UpdateRuleRequestBody"
        - name: If-Match
          in: header
          description: etag of the latest version for optimistic locking
          required: true
          type: string
      consumes:
        - application/json
      produces:
        - application/json
      responses:
        "200":
          description: Rule updated
          schema:
            $ref: "#/definitions/RuleUpdatedPage"
        "400":
          description: Bad request.
          schema:
            $ref: "#/definitions/MissingIfMatchHeader"
        "401":
          description: Unauthorized
          schema:
            $ref: "#/definitions/Unauthorized"
        "402":
          description: Rule activation exceeds the maximum number of active rules.
          schema:
            $ref: "#/definitions/RuleCannotBeActivated"
        "403":
          description: Forbidden (missing scope)
          schema:
            $ref: "#/definitions/Forbidden"
        "404":
          description: Rule not found
          schema:
            $ref: "#/definitions/RuleNotFound"
    patch:
      operationId: patchRule
      tags:
        - rules
      summary: Patch existing rule
      description: |
        Update the existing rule. The url contains the `ruleId` to identify the rule for patching. Properties in the request body are utilized to update the rule. The response contains the updated rule after patching.
        In order to change values, the patch body has to include the keys with the new values. In order to remove values, the patch body has to include the keys with `null` values.
        Patch can be used to set a new name, description, activate / deactivate the rule or adapt the evaluations and actions.
        **Attention&#58;** Any modification may cause a restart of the rule evaluation.
      security:
        - rules:
            - rules.u
      parameters:
        - name: ruleId
          in: path
          description: ID of rule that needs to be updated
          required: true
          type: string
        - in: body
          name: rule patch body
          description: Parameters which need to be updated in the existing rule
          required: true
          schema:
            $ref: "#/definitions/RulePatchBody"
        - name: If-Match
          in: header
          description: etag of the latest version for optimistic locking
          required: true
          type: string
      consumes:
        - application/json
      produces:
        - application/json
      responses:
        "200":
          description: Rule updated
          schema:
            $ref: "#/definitions/RuleUpdatedPage"
        "400":
          description: Bad request.
          schema:
            $ref: "#/definitions/MissingIfMatchHeader"
        "401":
          description: Unauthorized
          schema:
            $ref: "#/definitions/MissingIfMatchHeader"
        "403":
          description: Forbidden (missing scope)
          schema:
            $ref: "#/definitions/Forbidden"
        "404":
          description: Rule not found
          schema:
            $ref: "#/definitions/RuleNotFound"
definitions:
  RuleListPage:
    type: object
    properties:
      _embedded:
        $ref: "#/definitions/EmbeddedRulesArray"
      _links:
        $ref: "#/definitions/Links"
      quota:
        $ref: "#/definitions/Quota"
      page:
        $ref: "#/definitions/Page"
      message:
        type: string
        example: Rules read
  RulePage:
    type: object
    properties:
      _embedded:
        $ref: "#/definitions/EmbeddedRule"
      quota:
        $ref: "#/definitions/Quota"
      message:
        type: string
        example: Rule read
  EmbeddedRulesArray:
    type: object
    required:
      - rules
    properties:
      rules:
        type: array
        items:
          $ref: "#/definitions/Rule"
  Links:
    type: object
    properties:
      self:
        type: object
        properties:
          href:
            type: string
            format: uri
            example: "https://api.eu1.siemens.app/api/rulesmanagement/v4/rules?page=2&size=4"
      first:
        type: object
        properties:
          href:
            type: string
            format: uri
            example: "https://api.eu1.siemens.app/api/rulesmanagement/v4/rules?page=0&size=4"
      prev:
        type: object
        properties:
          href:
            type: string
            format: uri
            example: "https://api.eu1.siemens.app/api/rulesmanagement/v4/rules?page=1&size=4"
      next:
        type: object
        properties:
          href:
            type: string
            format: uri
            example: "https://api.eu1.siemens.app/api/rulesmanagement/v4/rules?page=3&size=4"
      last:
        type: object
        properties:
          href:
            type: string
            format: uri
            example: "https://api.eu1.siemens.app/api/rulesmanagement/v4/rules?page=15&size=4"
  Quota:
    type: object
    properties:
      active:
        type: number
        example: 31
        description: The number of active rules.
      total:
        type: number
        example: 50
        description: >-
          The number of all configured rules. This is the sum of all active
          and inactive rules.
      limitActive:
        type: number
        example: 70
        description: >-
          The maximum number of permited active rules. This is the number of
          rules purchased by the requesting user.
  Page:
    type: object
    properties:
      number:
        type: number
        example: 2
        description: "Zero based index of current page,"
      size:
        type: number
        example: 4
        description: >-
          The maximum number of elements returned per page. The last page may
          contain less elements.
      totalPages:
        type: number
        example: 16
        description: Total number of pages necessary to return all requested elements.
      totalElements:
        type: number
        example: 61
        description: >-
          Total available elements of the requested type. This is the number
          of all, active or inactive rules respectively.
  EmbeddedRule:
    type: object
    required:
      - rule
    properties:
      rule:
        $ref: "#/definitions/Rule"
  Rule:
    type: object
    properties:
      ruleType:
        description: Rule type. must be either "timeseries" or "oee"
        type: string
        example: "timeseries"
      ruleId:
        description: Rule ID
        type: string
        example: "580a52f638394c8ab35f22f03556a7ed"
      assetType:
        description: Asset type of the assets for which this rule applies
        type: string
        example: "myiottenant.GearBox"
      assetIds:
        description: Asset IDs of the assets for which this rule applies. All assets must belong to the defined asset type.
        type: array
        items:
          type: string
        example:
          [
            "9f81490428644ff995b0e3590f21ef57",
            "76a1388fee23496bacac9bc378aa65fe",
          ]
      schedule:
        description: Cron expression which describes the execution schedule for the oee rule (only for type oee)
        type: string
        example: "*/10 * * * *"
      timeRange:
        description: Time range in minutes that should be evaluated (only for type oee)
        type: number
        example: 60
      name:
        type: string
        example: Gear box temperature > 85°C
      description:
        type: string
        example: Raise warning if gear box temperature exceeds 85°C
      active:
        description: Activate rule processing
        type: boolean
      qualityCodes:
        $ref: "#/definitions/QualityCodes"
      lastChangedActive:
        description: "Time of last rule activation change"
        type: string
        example: "2022-05-30T05:38:16.438Z"
      creator:
        type: string
        example: <Name of user that has initially created the rule>
      created:
        type: string
        example: <Date and time of rule creation>
      editor:
        type: string
        example: <Name of user that has last updated the rule configuration>
      edited:
        type: string
        example: <Date and time of last rule update>
      etag:
        type: string
        example: "4b4283c1ba936b7ed38ba4dd936d79e4"
      evaluations:
        $ref: "#/definitions/RuleEvaluations"
      actions:
        $ref: "#/definitions/RuleActions"
      conditionMet:
        $ref: "#/definitions/RuleHealth"
  RuleEvaluation:
    type: object
    required:
      - property
      - condition
      - hysteresisAbsolute
      - debouncingTime
    properties:
      property:
        description: "/[aspect]/[variable]"
        type: string
        example: /data/GearBoxTemp
      condition:
        description: |
          Specifies the operator of the evaluation\
          = : equal to\
          <> : not equal to\
          !~ : on change\
          > : greater than\
          < : less than\
          >= : greater than or equal to\
          &#x3C;= : less than or equal to\
          []: in range\
          ][ : out of range
        type: string
        pattern: /^=$|^<>$|^!~$|^>$|^<$|^>=$|^<=$|^\[\]$|^\]\[$/
        example: ">="
      threshold:
        description: Threshold value. Not used for in range and out of range condition.
        type: integer
        example: 50
      lowerLimitThreshold:
        description: Lower threshold limit value required for in range and out of range condition.
        type: number
        example: 25
      upperLimitThreshold:
        description: Upper threshold limit value required for in range and out of range condition.
        type: number
        example: 75
      hysteresisAbsolute:
        description: Absolute hysteresis value offset from threshold.
        type: object
        required:
          - active
        properties:
          active:
            description: Activate hysteresis parameter(s)
            type: boolean
          value:
            description: Hysteresis value offset from threshold. Not used for in / out of range condition.
            type: number
            example: 10
          lowerValue:
            description: Lower hysteresis value used for in range and out of range condition. Fix value offset from lowerLimitThreshold
            type: number
            example: 10
          upperValue:
            description: Upper hysteresis value used for in range and out of range condition. Fix value offset from upperLimitThreshold
            type: number
            example: 10
      debouncingTime:
        type: object
        required:
          - active
        properties:
          active:
            description: Activate debouncing parameter
            type: boolean
          value:
            description: Minimum timespan in milliseconds which the time series values need to violate the condition and the threshold before the rule sets the value isConditionMet to true.
            type: number
            example: 60
  RuleEvaluations:
    type: array
    items:
      $ref: "#/definitions/RuleEvaluation"
  RuleActions:
    type: object
    properties:
      email:
        type: object
        properties:
          active:
            description: Activate email notification
            type: boolean
          address:
            type: string
            description: Email addresses to notify when an event is triggered
            example: user1@example.com;user2@example.com
      notifier:
        type: object
        properties:
          active:
            description: Create a notification via Simatic notifier when an event is triggered
            type: boolean
      status:
        type: object
        properties:
          active:
            description: Set asset status
            type: boolean
          severity:
            type: number
      vfc:
        type: object
        properties:
          active:
            description: Trigger a VFC flow when an event is triggered
            type: boolean
          triggerConfigs:
            type: array
            items:
              properties:
                nodeId:
                  description: Node ID of the inject node that should be triggered.
                  type: string
                projectId:
                  description: Project ID of the inject node
                  type: string
                userId:
                  description: User ID of the project
                  type: string
      event:
        type: object
        required:
          - severity
        properties:
          severity:
            type: number
          limitInterval:
            type: object
            properties:
              active:
                description: Enable limitation of events.
                type: boolean
              value:
                type: number
                description: Time limit value. E.g. a value of 10 creates max. 1 event within 10 minutes.
                example: 10
  QualityCodes:
    type: object
    required:
      - active
    properties:
      active:
        description: Enable/disable quality code filtering. If true, quality code filter will be applied to timeseries data.
        type: boolean
        example: true
  RuleHealth:
    type: object
    properties:
      status:
        type: boolean
        description: True if the last evaluation met the rule condition.
      timestamp:
        type: string
        example: "2022-01-25T11:57:54.833+01:00"
  CreateRuleResponseBody:
    type: object
    properties:
      _embedded:
        $ref: "#/definitions/EmbeddedNewRule"
      quota:
        $ref: "#/definitions/Quota"
      message:
        type: string
        example: Rule created
  EmbeddedNewRule:
    type: object
    required:
      - rule
    properties:
      rule:
        $ref: "#/definitions/NewRule"
  NewRule:
    type: object
    properties:
      ruleType:
        description: Rule type. must be either "timeseries" or "oee"
        type: string
        example: "timeseries"
      ruleId:
        description: Rule ID
        type: string
        example: "580a52f638394c8ab35f22f03556a7ed"
      assetType:
        description: Asset type of the assets for which this rule applies
        type: string
        example: "myiottenant.GearBox"
      assetIds:
        description: Asset IDs of the assets for which this rule applies. All assets must belong to the defined asset type
        type: array
        items:
          type: string
        example:
          [
            "9f81490428644ff995b0e3590f21ef57",
            "76a1388fee23496bacac9bc378aa65fe",
          ]
      schedule:
        description: Cron expression which describes the execution schedule for the oee rule (only for type oee)
        type: string
        example: "*/10 * * * *"
      timeRange:
        description: Time range in minutes that should be evaluated (only for type oee)
        type: number
        example: 60
      name:
        type: string
        example: Gear box temperature > 85°C
      description:
        type: string
        example: Raise warning if gear box temperature exceeds 85°C
      active:
        type: boolean
      qualityCodes:
        $ref: "#/definitions/QualityCodes"
      creator:
        type: string
        example: <Name of user that has initially created the rule>
      created:
        type: string
        example: <Date and time of rule creation>
      evaluations:
        $ref: "#/definitions/RuleEvaluations"
      actions:
        $ref: "#/definitions/RuleActions"
  CreateRuleRequestBody:
    type: object
    required:
      - ruleType
      - assetType
      - assetIds
      - name
      - description
      - active
      - evaluations
      - actions
    properties:
      assetType:
        description: Asset type of the assets for which this rule applies
        type: string
        example: "myiottenant.GearBox"
      assetIds:
        description: Asset Ids
        type: array
        items:
          type: string
        example:
          [
            "9f81490428644ff995b0e3590f21ef57",
            "76a1388fee23496bacac9bc378aa65fe",
          ]
      schedule:
        description: Cron expression which describes the execution schedule for the oee rule (required for type "oee")
        type: string
        example: "*/10 * * * *"
      timeRange:
        description: Time range in minutes that should be evaluated (required for type "oee")
        type: number
        example: 60
      name:
        type: string
        example: Gear box temperature > 85°C
      description:
        type: string
        example: Raise warning if gear box temperature exceeds 85°C
      active:
        type: boolean
        description: Creates the rule active or inactive
      evaluations:
        $ref: "#/definitions/RuleEvaluations"
      actions:
        $ref: "#/definitions/RuleActions"
  UpdateRuleRequestBody:
    type: object
    required:
      - name
      - description
      - active
      - evaluations
      - actions
    properties:
      name:
        type: string
        example: New awesome rule name
      description:
        type: string
        example: New desription
      active:
        description: Set rule active or inactive
        type: boolean
      evaluations:
        $ref: "#/definitions/RuleEvaluations"
      actions:
        $ref: "#/definitions/RuleActions"
  UpdatedRule:
    type: object
    properties:
      ruleType:
        description: Rule type. must be either "timeseries" or "oee"
        type: string
        example: "timeseries"
      ruleId:
        description: Rule ID
        type: string
        example: "580a52f638394c8ab35f22f03556a7ed"
      assetType:
        description: Asset type
        type: string
        example: "myiottenant.GearBox"
      assetIds:
        description: Asset IDs of the assets for which this rule applies. All assets must belong to the defined asset type
        type: array
        items:
          type: string
        example:
          [
            "9f81490428644ff995b0e3590f21ef57",
            "76a1388fee23496bacac9bc378aa65fe",
          ]
      schedule:
        description: Cron expression which describes the execution schedule for the oee rule (only for type oee)
        type: string
        example: "*/10 * * * *"
      timeRange:
        description: Time range in minutes that should be evaluated (only for type oee)
        type: number
        example: 60
      name:
        type: string
        example: Gear box temperature > 85°C
      description:
        type: string
        example: Raise warning if gear box temperature exceeds 85°C
      active:
        type: boolean
      creator:
        type: string
        example: <Name of user that has initially created the rule>
      created:
        type: string
        example: <Date and time of rule creation>
      editor:
        type: string
        example: <Name of user that has last updated the rule configuration>
      edited:
        type: string
        example: <Date and time of last rule update>
      evaluations:
        $ref: "#/definitions/RuleEvaluations"
      actions:
        $ref: "#/definitions/RuleActions"
  EmbeddedUpdatedRule:
    type: object
    properties:
      rule:
        $ref: "#/definitions/UpdatedRule"
  RuleUpdatedPage:
    type: object
    properties:
      _embedded:
        $ref: "#/definitions/EmbeddedUpdatedRule"
      quota:
        $ref: "#/definitions/Quota"
      message:
        type: string
        example: Rule updated
  RulePatchBody:
    type: object
    properties:
      name:
        type: string
        example: New rule name
      description:
        type: string
        example: New desription
      active:
        description: Set rule active or inactive
        type: boolean
      assetIds:
        description: Asset IDs of the assets for which this rule applies. All assets must belong to the defined asset type.
        type: array
        items:
          type: string
        example:
          [
            "9f81490428644ff995b0e3590f21ef57",
            "76a1388fee23496bacac9bc378aa65fe",
          ]
      schedule:
        description: Cron expression which describes the execution schedule for the oee rule (only for type oee)
        type: string
        example: "*/10 * * * *"
      timeRange:
        description: Time range in minutes that should be evaluated (only for type oee)
        type: number
        example: 60
      evaluations:
        $ref: "#/definitions/RuleEvaluations"
      actions:
        $ref: "#/definitions/RuleActions"
  RuleNotFound:
    type: object
    properties:
      errors:
        type: object
        required:
          - code
          - logref
          - message
        properties:
          code:
            type: string
            example: "mdsp.core.rules.notFound"
          logref:
            type: string
            example: "ac9d7bc9f2134b309e2a39366f76d496"
          message:
            type: string
            example: "Rule not found"
  FilterNotReadable:
    type: object
    required:
      - errors
    properties:
      errors:
        type: object
        required:
          - code
          - logref
          - message
        properties:
          code:
            type: string
            example: "mdsp.core.rules.missingParameter"
          logref:
            type: string
            example: "f287779b2c9f403fa739facca90b36b2"
          message:
            type: string
            example: "Missing parameter. Filter not readable"
  Unauthorized:
    type: object
    properties:
      errors:
        type: object
        required:
          - code
          - logref
          - message
        properties:
          code:
            type: string
            example: "mdsp.core.rules.unauthorized"
          logref:
            type: string
            example: "ac9d7bc9f2134b309e2a39366f76d496"
          message:
            type: string
            example: "Permission denied"
  Forbidden:
    type: object
    properties:
      errors:
        type: object
        required:
          - code
          - logref
          - message
        properties:
          code:
            type: string
            example: "mdsp.core.rules.forbidden"
          logref:
            type: string
            example: "ac9d7bc9f2134b309e2a39366f76d496"
          message:
            type: string
            example: "The current user does not have sufficient rights"
  InternalServerError:
    type: object
    properties:
      errors:
        type: object
        required:
          - code
          - logref
          - message
        properties:
          code:
            type: string
            example: "mdsp.core.rules.internalServerError"
          logref:
            type: string
            example: "ac9d7bc9f2134b309e2a39366f76d496"
          message:
            type: string
            example: "Internal server error"
  RuleCannotBeActivated:
    type: object
    properties:
      errors:
        type: object
        required:
          - code
          - logref
          - message
        properties:
          code:
            type: string
            example: "mdsp.core.rules.paymentRequired"
          logref:
            type: string
            example: "ac9d7bc9f2134b309e2a39366f76d496"
          message:
            type: string
            example: "Rule cannot be activated. You've reached the limit of active rules (active count: 10, limitActive: 10)."
  ParameterError:
    type: object
    properties:
      errors:
        type: object
        required:
          - code
          - logref
          - message
        properties:
          code:
            type: string
            example: "mdsp.core.rules.parameterError"
          logref:
            type: string
            example: "ba5ff05b5a6b485fb88031a531189c3a"
          message:
            type: string
            example: "Parameter error. Rule should have required property 'name'"
  RuleIdHasWrongFormat:
    type: object
    properties:
      errors:
        type: object
        required:
          - code
          - logref
          - message
        properties:
          code:
            type: string
            example: "mdsp.core.rules.invalidRuleId"
          logref:
            type: string
            example: "edf1abb99b2f4adab36d0bbe133a5d4b"
          message:
            type: string
            example: "Rule id has wrong format"
  MissingIfMatchHeader:
    type: object
    properties:
      errors:
        type: object
        required:
          - code
          - logref
          - message
        properties:
          code:
            type: string
            example: "mdsp.core.rules.parameterError"
          logref:
            type: string
            example: "2cb33c9919e74d3c94fea92fbb2fa1e8"
          message:
            type: string
            example: "Missing If-Match header"
