---
title: "Test a Suggestion Rule Configuration"
url: "https://us-prod.jeffyongtaotang.com/apis/konnect-service-catalog-1/versions/cdbef9b7-686c-4189-bbc8-55c727a972e8/operations/test-suggestion-rule"
---

> Full API specification: https://us-prod.jeffyongtaotang.com/apis/konnect-service-catalog-1/versions/cdbef9b7-686c-4189-bbc8-55c727a972e8.md

# Test a Suggestion Rule Configuration

`POST` `/integrations/{integration}/suggestion-rules/test`

Operation ID: `test-suggestion-rule`

Test suggestion rule configuration against an integration record.

## Path parameters

- `integration` (string, required) - Machine name of the integration.

## Request body (required)

Content types: `application/json`

## Responses

- `200` - A response containing the evaluation of a suggestion rule configuration against an integration data.
- `400` - Bad Request
- `401` - Unauthorized
- `403` - Forbidden

## OpenAPI definition

```yaml
openapi: 3.0.3
info:
  title: Konnect Service Catalog
  version: 1.3.0
servers:
  - url: https://us.api.konghq.com/v1
    description: United-States Production region
  - url: https://eu.api.konghq.com/v1
    description: Europe Production region
  - url: https://au.api.konghq.com/v1
    description: Australia Production region
  - url: https://me.api.konghq.com/v1
    description: Middle-East Production region
  - url: https://in.api.konghq.com/v1
    description: India Production region
  - url: https://sg.api.konghq.com/v1
    description: Singapore Production region
paths:
  /integrations/{integration}/suggestion-rules/test:
    parameters:
      - schema:
          type: string
          example: gateway-manager
        name: integration
        in: path
        required: true
        description: Machine name of the integration.
    post:
      x-unstable: true
      x-internal: true
      summary: Test a Suggestion Rule Configuration
      operationId: test-suggestion-rule
      description: Test suggestion rule configuration against an integration record.
      requestBody:
        $ref: "#/components/requestBodies/CreateTestSuggestionRuleBody"
      responses:
        "200":
          $ref: "#/components/responses/TestSuggestionRuleResponse"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
      tags:
        - Suggestion Rules
security:
  - konnectAccessToken: []
  - personalAccessToken: []
  - systemAccountAccessToken: []
components:
  requestBodies:
    CreateTestSuggestionRuleBody:
      description: Request body schema for testing a suggestion rule configuration
        against an integration data.
      required: true
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/TestSuggestionRulePayload"
          examples:
            Test Suggestion Rule:
              $ref: "#/components/examples/TestSuggestionRule"
  responses:
    TestSuggestionRuleResponse:
      description: A response containing the evaluation of a suggestion rule
        configuration against an integration data.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/TestSuggestionRule"
          examples:
            Test Suggestion Rule:
              $ref: "#/components/examples/TestSuggestionRuleArchiveResponse"
    BadRequest:
      description: Bad Request
      content:
        application/problem+json:
          schema:
            $ref: "#/components/schemas/BadRequestError"
    Unauthorized:
      description: Unauthorized
      content:
        application/problem+json:
          schema:
            $ref: "#/components/schemas/UnauthorizedError"
          examples:
            UnauthorizedExample:
              $ref: "#/components/examples/UnauthorizedExample"
    Forbidden:
      description: Forbidden
      content:
        application/problem+json:
          schema:
            $ref: "#/components/schemas/ForbiddenError"
          examples:
            UnauthorizedExample:
              $ref: "#/components/examples/ForbiddenExample"
  schemas:
    TestSuggestionRulePayload:
      title: TestSuggestionRulePayload
      description: Payload to test suggestion rule configuration against an
        integration record.
      type: object
      additionalProperties: false
      required:
        - binding
        - discovery_selector
        - action
        - integration_record
      properties:
        binding:
          type: string
          description: The integration binding object name
          example: pagerduty_service
        discovery_selector:
          type: string
          description: >
            A boolean string or JQ expression that must evaluate to a boolean
            value.

            Supports JQ expressions syntax on discovered entity's
            `integration_record` property.
          maxLength: 2048
          example: .gateway_service.tags | contains(["_KonnectDeployment:"])
        action:
          $ref: "#/components/schemas/SuggestedRuleAction"
        integration_record:
          type: object
          description: JSON object that may contain additional context about the entity.
          additionalProperties: true
          example:
            control_plane:
              id: 0a7647d1-483a-4817-a5ac-28937b511563
              name: control_plane_name
            gateway_service:
              id: 3fd1bff6-b60d-4c22-bb74-e4cac63196fb
              name: gateway_service_name
    TestSuggestionRule:
      title: TestSuggestionRule
      description: Contains evaluation results of a suggestion rule configuration
        against an integration record.
      type: object
      additionalProperties: false
      required:
        - evaluation
        - errors
      properties:
        evaluation:
          description: Evaluation result of suggesetion rule configuration against given
            integration record.
          type: object
          additionalProperties: false
          required:
            - matched
            - action
            - service_id
          properties:
            matched:
              description: Represents if the suggestion rule configuration matches the given
                integration record.
              type: boolean
            service_id:
              description: The identifier of a service the suggesiton rule configuration
                matches with the given integration record.
              type: string
              format: uuid
              nullable: true
              example: 7f9fd312-a987-4628-b4c5-bb4f4fddd5f7
            action:
              $ref: "#/components/schemas/SuggestedRuleActionEvaluated"
        errors:
          description: List of errors that occured when evaluating suggestion rule
            configuration against given integration record.
          type: array
          items:
            $ref: "#/components/schemas/SuggestionRuleErrorDetail"
    BadRequestError:
      allOf:
        - $ref: "#/components/schemas/BaseError"
        - type: object
          required:
            - invalid_parameters
          properties:
            invalid_parameters:
              $ref: "#/components/schemas/InvalidParameters"
    UnauthorizedError:
      allOf:
        - $ref: "#/components/schemas/BaseError"
        - type: object
          properties:
            status:
              example: 401
            title:
              example: Unauthorized
            type:
              example: https://httpstatuses.com/401
            instance:
              example: kong:trace:1234567890
            detail:
              example: Invalid credentials
    ForbiddenError:
      allOf:
        - $ref: "#/components/schemas/BaseError"
        - type: object
          properties:
            status:
              example: 403
            title:
              example: Forbidden
            type:
              example: https://httpstatuses.com/403
            instance:
              example: kong:trace:1234567890
            detail:
              example: Forbidden
    SuggestedRuleAction:
      oneOf:
        - $ref: "#/components/schemas/ArchiveActionPayload"
        - $ref: "#/components/schemas/IgnoreActionPayload"
        - $ref: "#/components/schemas/MapActionPayload"
        - $ref: "#/components/schemas/CreateOrMapAction"
    SuggestedRuleActionEvaluated:
      oneOf:
        - $ref: "#/components/schemas/ArchiveActionPayload"
        - $ref: "#/components/schemas/IgnoreActionPayload"
        - $ref: "#/components/schemas/MapActionPayload"
        - $ref: "#/components/schemas/CreateActionEvaluated"
    SuggestionRuleErrorDetail:
      type: object
      required:
        - type
        - field
        - expression
        - message
      properties:
        type:
          type: string
          description: >
            The type of error that occured when evaluating suggestion rule
            configuration against given integration record.
              - `error`: represents a generic error.
              - `timeout`: timeout occured when evaluating jq expression
              - `invalid-expression`: jq expression could not be evaluated due to syntax error(s).
              - `result-not-boolean`: jq expression was not evaluated to a boolean
              - `result-not-string`: jq expression was not evaluated to a string
              - `unexpected-result`: jq expression was not evaluated to a result that could not be determined
              - `InvalidLabelKeyInputType`: Indicates the label key is of an invalid type (i.e. number or symbol)
              - `InvalidEmptyLabelKey`: Indicates the label key is empty
              - `InvalidLabelKeyFormat`: Indicates that the format of the label key is invalid, ex: "-bad-format-"
              - `LabelKeyHasReservedPrefix`: Indicates that the label key starts with a Kong-reserved key prefix, ex: "kong-test-key"
              - `MaxLabelKeyCharsExceeded`: Indicates that a label key exceeds the maximum number of allowed characters
              - `InvalidLabelValueInputType`: Indicates the label value is of an invalid type (i.e. number or symbol)
              - `InvalidEmptyLabelValue`: Indicates that the label value is empty
              - `InvalidLabelValueFormat`: Indicates that the format of the label value is invalid, ex: "-bad-format-"
              - `MaxLabelValueCharsExceeded`: Indicates that a label value exceeds the maximum number of allowed characters
              - `InvalidLabelsInputType`: Indicates that a collection of labels is of an invalid type (i.e. array instead of key-value object)
              - `MaxLabelsPerEntityExceeded`: Indicates that a collection of labels exceeds the maximum number of labels allowed for a given entity
              - `ConflictingKeys`: Indicates that labels keys are not unique
              - `InvalidName`: Indicates that the name is invalid
              - `InvalidDisplayName`: Indicates that the display name is invalid
              - `InvalidDescription`: Indicates that the description is invalid
              - `InvalidLabels`: Indicates that the labels are invalid
              - `InvalidMetadata`: Indicates that the metadata is invalid
        field:
          type: string
          description: The field from the payload given which is responsible for this error.
        expression:
          type: string
          description: Represents the resolved or unresolved JQ expression which failed
            validation
        message:
          type: string
          description: Details of the error which occured when evaluating suggestion rule
            configuration against given integration record.
    BaseError:
      type: object
      title: Error
      description: standard error
      required:
        - status
        - title
        - instance
        - detail
      properties:
        status:
          type: integer
          description: >
            The HTTP status code of the error. Useful when passing the response

            body to child properties in a frontend UI. Must be returned as an
            integer.
          readOnly: true
        title:
          type: string
          description: |
            A short, human-readable summary of the problem. It should not
            change between occurences of a problem, except for localization.
            Should be provided as "Sentence case" for direct use in the UI.
          readOnly: true
        type:
          type: string
          description: The error type.
          readOnly: true
        instance:
          type: string
          description: |
            Used to return the correlation ID back to the user, in the format
            kong:trace:<correlation_id>. This helps us find the relevant logs
            when a customer reports an issue.
          readOnly: true
        detail:
          type: string
          description: >
            A human readable explanation specific to this occurence of the
            problem.

            This field may contain request/entity data to help the user
            understand

            what went wrong. Enclose variable values in square brackets. Should
            be

            provided as "Sentence case" for direct use in the UI.
          readOnly: true
    InvalidParameters:
      type: array
      nullable: false
      uniqueItems: true
      minItems: 1
      description: invalid parameters
      items:
        oneOf:
          - $ref: "#/components/schemas/InvalidParameterStandard"
          - $ref: "#/components/schemas/InvalidParameterMinimumLength"
          - $ref: "#/components/schemas/InvalidParameterMaximumLength"
          - $ref: "#/components/schemas/InvalidParameterChoiceItem"
          - $ref: "#/components/schemas/InvalidParameterDependentItem"
    ArchiveActionPayload:
      title: ArchiveActionPayload
      type: object
      additionalProperties: false
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - archive
    IgnoreActionPayload:
      title: IgnoreAction
      type: object
      additionalProperties: false
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - ignore
    MapActionPayload:
      title: MapAction
      description: >
        Must specify **at least one** of the following properties when
        `action_type` is `map`:

        - `id`

        - `name`
      type: object
      additionalProperties: false
      required:
        - type
        - data
      properties:
        type:
          type: string
          enum:
            - map
        data:
          type: object
          additionalProperties: false
          required:
            - service
            - resource
          properties:
            service:
              oneOf:
                - $ref: "#/components/schemas/MapByName"
                - $ref: "#/components/schemas/MapById"
            resource:
              type: object
              additionalProperties: false
              required:
                - labels
              properties:
                labels:
                  $ref: "#/components/schemas/LabelsTemplate"
    CreateOrMapAction:
      title: CreateOrMapAction
      type: object
      required:
        - type
        - data
      properties:
        type:
          type: string
          enum:
            - create-or-map
        data:
          type: object
          additionalProperties: false
          required:
            - service
            - resource
          properties:
            service:
              type: object
              additionalProperties: false
              required:
                - name
                - display_name
                - description
                - labels
                - metadata
              properties:
                name:
                  description: >
                    The name of the service to create or map to.

                    Supports JQ expression syntax on discovered entity's
                    `integration_record` property.
                  type: string
                  minLength: 1
                display_name:
                  type: string
                  nullable: true
                  description: >
                    The display name of the service on create. This property is
                    ignored on map.

                    Supports JQ expression syntax on discovered entity's
                    `integration_record` property.

                    If value is set to null, display name will be set to name.
                  minLength: 1
                description:
                  type: string
                  description: >
                    The description of the service. This property is ignored on
                    map.

                    Supports JQ expression syntax on discovered entity's
                    `integration_record` property.
                labels:
                  $ref: "#/components/schemas/LabelsTemplate"
                metadata:
                  $ref: "#/components/schemas/MetadataTemplate"
            resource:
              type: object
              additionalProperties: false
              required:
                - labels
              properties:
                labels:
                  $ref: "#/components/schemas/LabelsTemplate"
    CreateActionEvaluated:
      title: CreateActionEvaluated
      type: object
      required:
        - type
        - data
      properties:
        type:
          type: string
          enum:
            - create
        data:
          type: object
          additionalProperties: false
          required:
            - service
            - resource
          properties:
            service:
              $ref: "#/components/schemas/CatalogServiceSuggestion"
            resource:
              type: object
              additionalProperties: false
              required:
                - labels
              properties:
                labels:
                  $ref: "#/components/schemas/LabelsTemplate"
    InvalidParameterStandard:
      type: object
      additionalProperties: false
      properties:
        field:
          type: string
          example: name
          readOnly: true
        rule:
          $ref: "#/components/schemas/InvalidRules"
        source:
          type: string
          example: body
        reason:
          type: string
          example: is a required field
          readOnly: true
      required:
        - field
        - reason
    InvalidParameterMinimumLength:
      type: object
      additionalProperties: false
      properties:
        field:
          type: string
          example: name
          readOnly: true
        rule:
          description: invalid parameters rules
          type: string
          readOnly: true
          nullable: false
          enum:
            - min_length
            - min_digits
            - min_lowercase
            - min_uppercase
            - min_symbols
            - min_items
            - min
        minimum:
          type: integer
          example: 8
        source:
          type: string
          example: body
        reason:
          type: string
          example: must have at least 8 characters
          readOnly: true
      required:
        - field
        - reason
        - rule
        - minimum
    InvalidParameterMaximumLength:
      type: object
      additionalProperties: false
      properties:
        field:
          type: string
          example: name
          readOnly: true
        rule:
          description: invalid parameters rules
          type: string
          readOnly: true
          nullable: false
          enum:
            - max_length
            - max_items
            - max
        maximum:
          type: integer
          example: 8
        source:
          type: string
          example: body
        reason:
          type: string
          example: must not have more than 8 characters
          readOnly: true
      required:
        - field
        - reason
        - rule
        - maximum
    InvalidParameterChoiceItem:
      type: object
      additionalProperties: false
      properties:
        field:
          type: string
          example: name
          readOnly: true
        rule:
          description: invalid parameters rules
          type: string
          readOnly: true
          nullable: false
          enum:
            - enum
        reason:
          type: string
          example: is a required field
          readOnly: true
        choices:
          type: array
          uniqueItems: true
          readOnly: true
          nullable: false
          minItems: 1
          items: {}
        source:
          type: string
          example: body
      required:
        - field
        - reason
        - rule
        - choices
    InvalidParameterDependentItem:
      type: object
      additionalProperties: false
      properties:
        field:
          type: string
          example: name
          readOnly: true
        rule:
          description: invalid parameters rules
          type: string
          readOnly: true
          nullable: true
          enum:
            - dependent_fields
        reason:
          type: string
          example: is a required field
          readOnly: true
        dependents:
          type: array
          uniqueItems: true
          nullable: true
          items: {}
          readOnly: true
        source:
          type: string
          example: body
      required:
        - field
        - rule
        - reason
        - dependents
    MapByName:
      type: object
      additionalProperties: false
      required:
        - name
      properties:
        name:
          type: string
          description: >
            Exact match on service name based on suggestion rule scope.

            Supports JQ expression syntax on discovered entity's
            `integration_record` property.
          example: "{{ .gateway_service.name }}-{{ .runtime_group.labels.env }}"
    MapById:
      type: object
      additionalProperties: false
      required:
        - id
      properties:
        id:
          type: string
          description: >
            Exact match on service identifier based on suggestion rule scope.

            Supports JQ expression syntax on discovered entity's
            `integration_record` property.
          example: 1ace6cb5-75ca-4488-a05d-9260628a37a8
    LabelsTemplate:
      title: LabelsTemplate
      type: object
      example:
        env: test
      description: >
        Labels to facilitate grouping and tagged search.

        Resolved keys must be of length 1-63 characters, and cannot start with
        ''kong'', ''konnect'', ''mesh'', ''kic'', or ''_''.'

        Label key and value supports JQ expression syntax on discovered entity's
        `integration_record` property.
      additionalProperties:
        type: string
        minLength: 1
    MetadataTemplate:
      type: object
      description: Contains key value pairs information about entity's metadata.
        Supports JQ templates on values which resolves to a string.
      additionalProperties:
        anyOf:
          - type: string
            nullable: true
          - type: number
            nullable: true
          - type: boolean
            nullable: true
          - $ref: "#/components/schemas/UrlMetadataValueTemplate"
    CatalogServiceSuggestion:
      type: object
      additionalProperties: false
      required:
        - name
        - display_name
      properties:
        name:
          type: string
          description: >
            The machine name of the Service that uniquely identifies it within
            the catalog.
          example: user-svc
        display_name:
          type: string
          description: The display name of the Service.
          example: User Service
        description:
          type: string
          description: Optionally provide a description of the Service.
        labels:
          $ref: "#/components/schemas/LabelsSuggestion"
        metadata:
          $ref: "#/components/schemas/CustomFieldsSuggestion"
    InvalidRules:
      description: invalid parameters rules
      type: string
      readOnly: true
      nullable: true
      enum:
        - required
        - is_array
        - is_base64
        - is_boolean
        - is_date_time
        - is_integer
        - is_null
        - is_number
        - is_object
        - is_string
        - is_uuid
        - is_fqdn
        - is_arn
        - unknown_property
        - missing_reference
        - is_label
        - matches_regex
        - invalid
        - is_supported_network_availability_zone_list
        - is_supported_network_cidr_block
        - is_supported_provider_region
        - type
    UrlMetadataValueTemplate:
      type: object
      description: Contains the name and link value associated with a URL Metadata
        Field. Supports JQ templates which resolves to a string.
      allOf:
        - $ref: "#/components/schemas/UrlMetadataValueBase"
        - type: object
          required:
            - link
          properties:
            link:
              description: The url link associated with the metadata value.
              type: string
              minLength: 1
              example: "#public-slack-channel"
    LabelsSuggestion:
      title: LabelsTemplate
      type: object
      example:
        env: test
      description: >
        Labels to facilitate grouping and tagged search.

        Resolved keys must be of length 1-63 characters, and cannot start with
        ''kong'', ''konnect'', ''mesh'', ''kic'', or ''_''.'

        Label key and value supports JQ expression syntax on discovered entity's
        `integration_record` property.
      additionalProperties:
        type: string
    CustomFieldsSuggestion:
      type: object
      description: >
        Map of customizable, catalog-defined fields providing information about
        a service.
      additionalProperties:
        anyOf:
          - $ref: "#/components/schemas/TextCustomField"
          - $ref: "#/components/schemas/NumericCustomField"
          - $ref: "#/components/schemas/BooleanCustomField"
          - $ref: "#/components/schemas/UrlCustomFieldSuggestion"
      example:
        owner: John Appleseed
        dashboard:
          name: On-Call Dashboard
          link: https://my-dashboard-svc.io/dashboards/1
    UrlMetadataValueBase:
      type: object
      nullable: true
      required:
        - name
      properties:
        name:
          description: The human-readable name for the url metadata value
          type: string
          minLength: 1
          example: "#public-slack-channel"
    TextCustomField:
      type: string
      nullable: true
    NumericCustomField:
      type: number
      nullable: true
    BooleanCustomField:
      type: boolean
      nullable: true
    UrlCustomFieldSuggestion:
      additionalProperties:
        type: string
  examples:
    TestSuggestionRule:
      value:
        binding: datadog_monitor
        discovery_selector: '| any(.tags[];  startswith("service:sample"))'
        action:
          type: map
          data:
            service:
              name: sample
            resource:
              labels: {}
        integration_record:
          name: sample-monitor
          description: A sample monitor
          tags:
            - service:sample
    TestSuggestionRuleArchiveResponse:
      value:
        evaluation:
          matched: true
          service_id: 7f9fd312-a987-4628-b4c5-bb4f4fddd5f7
          action:
            type: archive
        errors: []
    UnauthorizedExample:
      value:
        status: 401
        title: Unauthorized
        instance: kong:trace:8347343766220159418
        detail: Unauthorized
    ForbiddenExample:
      value:
        status: 403
        title: Forbidden
        instance: kong:trace:2723154947768991354
        detail: You do not have permission to perform this action
  securitySchemes:
    konnectAccessToken:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >
        The Konnect access token is meant to be used by the Konnect dashboard
        and the decK CLI authenticate with.
    personalAccessToken:
      type: http
      scheme: bearer
      bearerFormat: Token
      description: >
        The personal access token is meant to be used as an alternative to
        basic-auth when accessing Konnect via APIs.

        You can generate a Personal Access Token (PAT) from the [personal access
        token page](https://cloud.konghq.com/global/account/tokens/) in the
        Konnect dashboard.

        The PAT token must be passed in the header of a request, for example:

        `curl -X GET 'https://global.api.konghq.com/v2/users/' --header
        'Authorization: Bearer kpat_xgfT...'`
    systemAccountAccessToken:
      type: http
      scheme: bearer
      bearerFormat: Token
      description: >
        The system account access token is meant for automations and
        integrations that are not directly associated with a human identity.

        You can generate a system account Access Token by creating a system
        account and then obtaining a system account access token for that
        account.

        The access token must be passed in the header of a request, for example:

        `curl -X GET 'https://global.api.konghq.com/v2/users/' --header
        'Authorization: Bearer spat_i2Ej...'`
```
