openapi: 3.1.0
info:
  title: Conduktor Gateway API
  version: v2
  summary: The API to interact with Conduktor Gateway programmatically
  contact:
    email: contact@conduktor.io
    url: https://docs.conduktor.io
  x-logo:
    url: https://raw.githubusercontent.com/conduktor/conduktor.io-public/main/logo/conduktor-gateway-api.png
    backgroundColor: '#FFFFFF'
    altText: Conduktor logo
tags:
- name: Introduction
  description: |
    The Conduktor Gateway REST API 's aim is to help you configure your Gateway.

    The legacy (v1) API was removed in 3.21.0. See [Removed APIs](https://docs.conduktor.io/guide/reference/removed-apis) for the v1 API reference.

    Get started with Conduktor Gateway [self-hosted](https://docs.conduktor.io/guide/conduktor-in-production/deploy-artifacts/deploy-gateway) today. Setup takes only a few minutes.
- name: Authentication
  description: |-
    Authentication to the API requires a basic authentication.

    To get a token and use it you must go through the following steps:

    * Configure the admin password in the Gateway YAML configuration file.

    * Use the password in the **authorization** header of your requests.

    Example:

    ```shell
    curl -X GET "https://your.gateway-api.host/gateway/v2/virtual-cluster" \
          -H "accept: application/json" \
          --user "admin:password"
    ```
- name: Kinds
  description: |
    ### Definition

    Kinds the resource types of the Conduktor gateway.

    ### Conduktor Gateway Kinds

    The following kinds are available in the Conduktor Gateway API:

    * `VirtualCluster`
    * `PhysicalCluster`
    * `AliasTopic`
    * `ConcentratedTopic`
    * `ConcentrationRule`
    * `Interceptor`
    * `Plugin`
    * `GatewayServiceAccount`
    * `Token`
    * `GatewayGroup`
- name: Api Groups
  description: |
    ### Definition

    API groups a set of resources that share the same API path prefix. They are used to organize the API endpoints and the
    resources they manage.
    The versioning is set at this level, so all the resources in the same group share the same version.

    ### Conduktor Api Groups

    The Gateway API consist of a single API group right now (`gateway`), and it manages the following resources:

    | Api Group  | Version | Kinds                                                                                                                                                                                                              |
    |------------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
    | `/gateway` | `/v2`   | `/virtual-cluster`, `/alias-topic`, `/concentrated-topic`, `/concentration-rule`, </br> `/interceptor`, `/plugin`, `/service-account`, `/group`, `/token`, </br> `/topic-view`, `/cluster-switching`, `/analytics` |
- name: Versioning
  description: |+
    * __The version is set at the api group level__. It is incremented when a breaking change happens in the schema of an endpoint of the group (that has been marked `stable`). The n-1 version is still available for a while to allow users to migrate. The version is part of the endpoint path.
    * The API version (v2) is the global version of the Conduktor Gateway API, it should not change unless there is a complete overhaul of the API.


    Endpoint also have a status to manage their API lifecycle, following the order below:
    * __preview__: this is an early-stage feature, really likely to change
    * __beta__: early access feature, breaking change
    * __stable__: Production-ready endpoint, no breaking change
    * __deprecated__: This endpoint isn't supported anymore and the user should migrate


- name: Conventions
  description: |+
    ### Path conventions

    The API follows as much as possible the endpoints structure below for each kind of resource:

    * `GET /{api-group}/{version}/{kind}/{name}` to read a resource
    * `GET /{api-group}/{version}/{kind}` to list resources of a kind
    * `PUT /{api-group}/{version}/{kind}` to update or create a resource
    * `DELETE /{api-group}/{version}/{kind}/{name}` to delete a resource (returns 204 No Content)
    * `POST` is used for specific operations that don't fit this CRUD model. PUT is the default verb for updates and
      creations.
    * Important principle: the result of a GET can be reused as the body of a PUT to update the resource.

    __Non-unique names__:
    When a `name` is not enough to uniquely identify a resource, the GET and DELETE endpoint are different
    The GET by name is replaced by query parameters (returning lists or the searched item if the criteria are the elements
    of the key), and the DELETE by name is replaced by a DELETE with a body.
    For example, an `alias-topic` is identified by its `name` and the `vCluster` gives the following endpoints:

    * `GET /gateway/v2/alias-topic?name={name}&vcluster={vcluster}`
    * `PUT /gateway/v2/alias-topic`
    * `DELETE /gateway/v2/alias-topic` with a body containing the `name` and the `vCluster`

    ### Other conventions

    * All requests and responses are in JSON and should have their `content-type` header set to `application/json`
    * Every kind has a lower-cased name (e.g. `virtual-cluster` for the `VirtualCluster` kind) that is used in the endpoint
      path.
    * Errors have a standard format:
        * The HTTP status code is used to indicate the type of error.
        * The response body contains a common JSON object for every error:
            * `title`: a unique error code for the error.
            * `message`: a human-readable message for the error.
            * `cause`: additional information about the error.
    * All timestamps are in ISO 8601 format.

- name: cli_virtual-cluster_gateway_v2_7
  description: |+
    ### Definition

    https://docs.conduktor.io/guide/conduktor-concepts/virtual-clusters

    ### Available operations

    * List virtual clusters
    * Get a virtual cluster
    * Upsert a virtual cluster
    * Delete a virtual cluster

    ### Identity

    A virtual cluster is identified by the `name`.

    ### Schema

    <SchemaDefinition schemaRef="#/components/schemas/VirtualCluster" />


  x-displayName: virtual-cluster
- name: cli_alias-topic_gateway_v2_8
  description: |+
    ### Definition

    https://docs.conduktor.io/guide/conduktor-concepts/logical-topics#alias-topics

    ### Available operations

    * List alias topics
    * Upsert an alias topic
    * Delete an alias topic

    ### Identity

    An alias topic is identified by the `name` inside a `vCluster` (`passthrough` if omitted).

    ### Schema

    <SchemaDefinition schemaRef="#/components/schemas/AliasTopic" />


  x-displayName: alias-topic
- name: cli_concentrated-topic_gateway_v2_0
  description: |+
    ### Definition

    https://docs.conduktor.io/guide/conduktor-concepts/logical-topics#concentrated-topics

    ### Available operations

    * List concentrated topics

    Concentrated topics are created when a concentration rule is applied. They are not created or deleted directly by the API.

    ### Identity

    A concentrated topic is identified by the `name` and the `vCluster` (`passthrough` if omitted).

    ### Schema

    <SchemaDefinition schemaRef="#/components/schemas/ConcentratedTopic" />


  x-displayName: concentrated-topic
- name: cli_concentration-rule_gateway_v2_9
  description: |+
    ### Definition

    https://docs.conduktor.io/guide/conduktor-concepts/logical-topics#concentrated-topics

    ### Available operations

    * List concentration rules
    * Get a concentration rule
    * Upsert a concentration rule
    * Delete a concentration rule


    ### Identity

    A concentration rule is identified by its `name` inside a `vCluster`.

    ### Schema

    <SchemaDefinition schemaRef="#/components/schemas/ConcentrationRule" />


  x-displayName: concentration-rule
- name: cli_interceptor_gateway_v2_12
  description: |+
    ### Definition

    https://docs.conduktor.io/guide/conduktor-concepts/interceptors

    ### Available operations

    * List the interceptors
    * Get an interceptor
    * Upsert an interceptor
    * Delete an interceptor

    ### Identity

    An interceptor is identified by its `name` and its `scope`.
    The `scope` is itself composed of 3 optional fields `vCluster`, `group`, `username`.
    A __global__ interceptor is an interceptor whose `scope` has its fields empty.

    ### Schema

    <SchemaDefinition schemaRef="#/components/schemas/Interceptor"/>


  x-displayName: interceptor
- name: plugin
  description: |+
    ### Definition

    https://docs.conduktor.io/guide/conduktor-concepts/interceptors

    ### Available operations

    * List the available plugins of the Gateway

    ### Identity

    A plugin is identified by its `pluginId`.

    The list of plugins is fixed for a given Gateway instance.
    The list is fixed and cannot be modified.

    ### Schema

    <SchemaDefinition schemaRef="#/components/schemas/Plugin" />


- name: cli_gateway-service-account_gateway_v2_10
  description: |+
    ### Definition

    https://docs.conduktor.io/guide/conduktor-concepts/gw-service-accounts

    ### Available operations

    * List service accounts
    * Upsert a service account
    * Delete a service account

    ### Identity

    The service account is identified by the `name` and the `vCluster`.

    The `vCluster` name is not mandatory, but if omitted, the `passthrough` virtual cluster will be used.
    Thus, a service account is always associated with one and only one virtual cluster.

    ### Local and external service accounts

    A service account can be `Local` or `External`.

    * A `Local` service account is just a local user that allows to generate Gateway tokens for your Kafka client
      applications (SASL).
    * An `External` service account is a user that is authenticated by an external system (OIDC). In such a
      scenario you will only need to create external service accounts in 2 cases : either to rename the OIDC principal
      for you Kafka applications OR to gather service accounts into `Groups`. Gateway Tokens are not issued for external
      service accounts since the authentication must be done by the external system.

    To create an external service account you must provide have an `principal` that is the name of the user in the
    external system.
    It can be equal or not to the service account `name` (up to you), but note that __the `principal` must be unique
    across all virtual clusters__.

    ### Schema

    <SchemaDefinition schemaRef="#/components/schemas/GatewayServiceAccount" />


  x-displayName: service-account
- name: cli_gateway-group_gateway_v2_11
  description: |+
    ### Definition

    Groups a defined by name a allow to regroup Gateway users in order to apply interceptors rules.

    ### Available operations

    * List groups
    * Get a group
    * Upsert a group
    * Delete a group

    ### Identity

    The group is identified by its `name` (unique across all the virtual clusters).

    A group can be added external groups (coming from LDAP, OIDC claims etc.) which will allow the Gateway to bind them on the Gateway Group.

    ### Schema

    <SchemaDefinition schemaRef="#/components/schemas/GatewayGroup" />


  x-displayName: group
- name: token
  description: |+
    ### Definition

    The token group contains just a utility endpoint to generate a token for a given Local ServiceAccount (on a given
    virtual cluster, or `passthrough` if omitted).

    This token can be used to authenticate against the Gateway API in the `sasl_plaintext` authentication mode.
    More information on this case here : https://docs.conduktor.io/guide/tutorials/manage-gw-sa

    ### Available operations

    * Generate a token

    ### Identity

    N/A.

- name: analytics
  description: |+
    ### Definition

    The Gateway Lived Event captures real-time insights into interceptors on the Gateway, including their types, instances, and topics covered. It also tracks metrics like service accounts, groups, and alias topics. Data is accessible via Segment events and a REST endpoint.

    ### Available operations

    * Get Gateway Lived event statistics

    ### Identity

    N/A.

    ### Schema

    <SchemaDefinition schemaRef="#/components/schemas/GatewayLivedEvent" />


- name: cluster-switching
  description: |+
    ### Definition

    https://docs.conduktor.io/guide/conduktor-in-production/deploy-artifacts/deploy-gateway/index#configure-gateway-for-failover

    ### Available operations

    * Switch cluster

    ### Identity

    A cluster switch operation is identified by the `fromPhysicalCluster` and `toPhysicalCluster` parameters.

    ### Schema

    <SchemaDefinition schemaRef="#/components/schemas/ClusterSwitchingRequest" />

    <SchemaDefinition schemaRef="#/components/schemas/ClusterSwitchingResponse" />

  x-displayName: cluster-switching
- name: cli_topic-view_gateway_v2_13
  description: |+
    ### Definition

    Topic Views provide a way to create virtual topics that transform records from a physical topic. The initial transformation type is SQL, which filters records using SQL predicates. Clients consume from the virtual topic name and receive only records matching the transformation criteria.

    ### Available operations

    * List topic views
    * Upsert a topic view
    * Delete a topic view

    ### Identity

    A topic view is identified by the `name` inside a `vCluster` (`passthrough` if omitted).

    ### Schema

    <SchemaDefinition schemaRef="#/components/schemas/TopicView" />

  x-displayName: topic-view
paths:
  /gateway/v2/token:
    post:
      tags:
      - token
      description: |2+


        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Create a new token for given service account and a given virtual cluster.

        If the vcluster is not provided, the token will be created for the passthrough virtual cluster.

      operationId: Generate a token for a service account on a virtual cluster
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TokenRequest'
            example:
              vCluster: vcluster1
              username: user1
              lifeTimeSeconds: 3600
        required: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenResponse'
              example:
                token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMSIsIm5hbWUiOiJ1c2VyMSIsImlhdCI6MTUxNjIzOTAyMn0.1Q2JjNz
        '400':
          description: 'Invalid value for: body'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '404':
          description: The searched entity was not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: The searched entity was not found
        '409':
          description: Requesting a JWT token when no user pool service is configured
            in the Gateway or requesting a token for an external service account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conflict'
              example:
                title: Requesting a JWT token when no user pool service is configured
                  in the Gateway or requesting a token for an external service account.
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-cdk-run-version: '1'
      x-cdk-run-name: generateServiceAccountToken
      x-cdk-run-doc: Generate a token for a service account on a virtual cluster
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request POST \
            --url 'http://localhost:8888/gateway/v2/token' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
            --header 'Content-Type: application/json' \
            --data-raw '{"vCluster":"vcluster1","username":"user1","lifeTimeSeconds":3600000}'
  /gateway/v2/virtual-cluster:
    get:
      tags:
      - cli_virtual-cluster_gateway_v2_7
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        List the virtual clusters

      operationId: List the virtual clusters
      parameters:
      - name: listener
        in: query
        description: Optional listener name to use for bootstrap servers. Defaults
          to the first configured listener.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                uniqueItems: true
                items:
                  $ref: '#/components/schemas/VirtualCluster'
              example:
              - kind: VirtualCluster
                apiVersion: gateway/v2
                metadata:
                  name: vcluster1
                spec:
                  aclEnabled: false
                  superUsers:
                  - username1
                  - username2
                  type: Standard
                  bootstrapServers: kafka:9092
                  clientProperties:
                    PLAIN:
                      security.protocol: SASL_PLAINTEXT
                      sasl.mechanism: PLAIN
                      sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule
                        required username='{{username}}' password='{{password}}';
              - kind: VirtualCluster
                apiVersion: gateway/v2
                metadata:
                  name: aclVCluster
                spec:
                  aclEnabled: true
                  aclMode: REST_API
                  type: Standard
                  bootstrapServers: kafka:9092
                  clientProperties:
                    PLAIN:
                      security.protocol: SASL_PLAINTEXT
                      sasl.mechanism: PLAIN
                      sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule
                        required username='{{username}}' password='{{password}}';
                  acls:
                  - resourcePattern:
                      resourceType: TOPIC
                      name: allowedTopic
                      patternType: LITERAL
                    principal: User:someOtherUser
                    host: '*'
                    operation: WRITE
                    permissionType: ALLOW
                  - resourcePattern:
                      resourceType: TOPIC
                      name: allowedTopic
                      patternType: LITERAL
                    principal: User:someUser
                    host: '*'
                    operation: READ
                    permissionType: ALLOW
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              examples:
                Example0:
                  value:
                    title: Virtual clusters are not supported in Kafka managed security
                      mode.
                Example1:
                  value:
                    title: 'Virtual clusters are not supported: requires a SASL listener
                      or mTLS.'
                Example2:
                  value:
                    title: 'Unknown listener ''...''. Available listeners: ...'
                Example3:
                  value:
                    title: Listener '...' is not compatible with virtual clusters
                      (requires SASL or mTLS).
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request GET \
            --url 'http://localhost:8888/gateway/v2/virtual-cluster' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y'
    put:
      tags:
      - cli_virtual-cluster_gateway_v2_7
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Upsert a virtual cluster

      operationId: Upsert a virtual cluster (optionally including ACLs)
      parameters:
      - name: dryMode
        in: query
        description: If true, the operation will be simulated and no changes will
          be made
        required: false
        schema:
          default: false
          type: boolean
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VirtualCluster'
            examples:
              Standard Virtual Cluster:
                summary: Virtual Cluster ACLs managed via Super Users
                value:
                  kind: VirtualCluster
                  apiVersion: gateway/v2
                  metadata:
                    name: vcluster1
                  spec:
                    aclEnabled: false
                    superUsers:
                    - username1
                    - username2
                    type: Standard
                    bootstrapServers: kafka:9092
                    clientProperties:
                      PLAIN:
                        security.protocol: SASL_PLAINTEXT
                        sasl.mechanism: PLAIN
                        sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule
                          required username='{{username}}' password='{{password}}';
              Standard Virtual Cluster with ACLs:
                summary: All ACLs defined by REST so Super Users not allowed
                value:
                  kind: VirtualCluster
                  apiVersion: gateway/v2
                  metadata:
                    name: aclVCluster
                  spec:
                    aclEnabled: true
                    aclMode: REST_API
                    type: Standard
                    bootstrapServers: kafka:9092
                    clientProperties:
                      PLAIN:
                        security.protocol: SASL_PLAINTEXT
                        sasl.mechanism: PLAIN
                        sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule
                          required username='{{username}}' password='{{password}}';
                    acls:
                    - resourcePattern:
                        resourceType: TOPIC
                        name: allowedTopic
                        patternType: LITERAL
                      principal: User:someOtherUser
                      host: '*'
                      operation: WRITE
                      permissionType: ALLOW
                    - resourcePattern:
                        resourceType: TOPIC
                        name: allowedTopic
                        patternType: LITERAL
                      principal: User:someUser
                      host: '*'
                      operation: READ
                      permissionType: ALLOW
        required: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplyResult_VirtualCluster'
              example:
                resource:
                  kind: VirtualCluster
                  apiVersion: gateway/v2
                  metadata:
                    name: vcluster1
                  spec:
                    aclEnabled: false
                    superUsers:
                    - username1
                    - username2
                    type: Standard
                    bootstrapServers: kafka:9092
                    clientProperties:
                      PLAIN:
                        security.protocol: SASL_PLAINTEXT
                        sasl.mechanism: PLAIN
                        sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule
                          required username='{{username}}' password='{{password}}';
                upsertResult: Updated
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              examples:
                Example0:
                  value:
                    title: Virtual clusters are not supported in Kafka managed security
                      mode.
                Example1:
                  value:
                    title: 'Virtual clusters are not supported: requires a SASL listener
                      or mTLS.'
                Example2:
                  value:
                    title: Virtual cluster name ... is reserved.
                Example3:
                  value:
                    title: Virtual cluster name ... does not match pattern ...
                Example4:
                  value:
                    title: Partner virtual clusters must have aclEnabled = true and
                      at least one super user when aclMode is KAFKA_API.
                Example5:
                  value:
                    title: acls are only valid if aclMode = 'REST_API'
                Example6:
                  value:
                    title: cannot set superUsers if aclMode = 'REST_API'
                Example7:
                  value:
                    title: You cannot set acls or superUsers until you have chosen
                      an aclMode.
                Example8:
                  value:
                    title: ACL patterns that grant users write access to ACLs are
                      forbidden
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '403':
          description: The required feature is not included in the current license
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Forbidden'
              example:
                title: The required feature is not included in the current license
        '409':
          description: Cannot change prefix or type of an existing virtual cluster
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conflict'
              example:
                title: Cannot change prefix or type of an existing virtual cluster
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request PUT \
            --url 'http://localhost:8888/gateway/v2/virtual-cluster?dryMode=false' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
            --header 'Content-Type: application/json' \
            --data-raw '{
            "kind" : "VirtualCluster",
            "apiVersion" : "gateway/v2",
            "metadata" : {
              "name" : "vcluster1"
            },
            "spec" : {
              "aclEnabled" : false,
              "superUsers" : [
                "username1",
                "username2"
              ],
              "type" : "Standard",
              "bootstrapServers" : "kafka:9092",
              "clientProperties" : {
                "PLAIN" : {
                  "security.protocol" : "SASL_PLAINTEXT",
                  "sasl.mechanism" : "PLAIN",
                  "sasl.jaas.config" : "org.apache.kafka.common.security.plain.PlainLoginModule required username=\'{{username}}\' password=\'{{password}}\';"
                }
              }
            }
          }'
  /gateway/v2/virtual-cluster/{vCluster}:
    get:
      tags:
      - cli_virtual-cluster_gateway_v2_7
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Get a virtual cluster

      operationId: Get a virtual cluster
      parameters:
      - name: vCluster
        in: path
        description: The name of the virtual cluster
        required: true
        schema:
          type: string
      - name: listener
        in: query
        description: Optional listener name to use for bootstrap servers. Defaults
          to the first configured listener.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualCluster'
              examples:
                Standard Virtual Cluster:
                  summary: Virtual Cluster ACLs managed via Super Users
                  value:
                    kind: VirtualCluster
                    apiVersion: gateway/v2
                    metadata:
                      name: vcluster1
                    spec:
                      aclEnabled: false
                      superUsers:
                      - username1
                      - username2
                      type: Standard
                      bootstrapServers: kafka:9092
                      clientProperties:
                        PLAIN:
                          security.protocol: SASL_PLAINTEXT
                          sasl.mechanism: PLAIN
                          sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule
                            required username='{{username}}' password='{{password}}';
                Standard Virtual Cluster with ACLs:
                  summary: All ACLs defined by REST so Super Users not allowed
                  value:
                    kind: VirtualCluster
                    apiVersion: gateway/v2
                    metadata:
                      name: aclVCluster
                    spec:
                      aclEnabled: true
                      aclMode: REST_API
                      type: Standard
                      bootstrapServers: kafka:9092
                      clientProperties:
                        PLAIN:
                          security.protocol: SASL_PLAINTEXT
                          sasl.mechanism: PLAIN
                          sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule
                            required username='{{username}}' password='{{password}}';
                      acls:
                      - resourcePattern:
                          resourceType: TOPIC
                          name: allowedTopic
                          patternType: LITERAL
                        principal: User:someOtherUser
                        host: '*'
                        operation: WRITE
                        permissionType: ALLOW
                      - resourcePattern:
                          resourceType: TOPIC
                          name: allowedTopic
                          patternType: LITERAL
                        principal: User:someUser
                        host: '*'
                        operation: READ
                        permissionType: ALLOW
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              examples:
                Example0:
                  value:
                    title: Virtual clusters are not supported in Kafka managed security
                      mode.
                Example1:
                  value:
                    title: 'Virtual clusters are not supported: requires a SASL listener
                      or mTLS.'
                Example2:
                  value:
                    title: 'Unknown listener ''...''. Available listeners: ...'
                Example3:
                  value:
                    title: Listener '...' is not compatible with virtual clusters
                      (requires SASL or mTLS).
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '404':
          description: Virtual cluster ... not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: Virtual cluster ... not found.
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request GET \
            --url 'http://localhost:8888/gateway/v2/virtual-cluster/vcluster1' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y'
    delete:
      tags:
      - cli_virtual-cluster_gateway_v2_7
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Delete a virtual cluster

      operationId: Delete a virtual cluster
      parameters:
      - name: vCluster
        in: path
        description: The name of the virtual cluster
        required: true
        schema:
          type: string
      responses:
        '204':
          description: ''
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              examples:
                Example0:
                  value:
                    title: Virtual clusters are not supported in Kafka managed security
                      mode.
                Example1:
                  value:
                    title: 'Virtual clusters are not supported: requires a SASL listener
                      or mTLS.'
                Example2:
                  value:
                    title: Virtual cluster passthrough cannot be deleted.
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '404':
          description: Virtual cluster ... not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: Virtual cluster ... not found.
        '409':
          description: The given virtual cluster has references (logical topics, interceptors,
            concentration rules, service accounts) and cannot be deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conflict'
              example:
                title: The given virtual cluster has references (logical topics, interceptors,
                  concentration rules, service accounts) and cannot be deleted
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request DELETE \
            --url 'http://localhost:8888/gateway/v2/virtual-cluster/vcluster1' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y'
  /gateway/v2/alias-topic:
    get:
      tags:
      - cli_alias-topic_gateway_v2_8
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        List the alias topics of a virtual cluster

      operationId: List the alias topics
      parameters:
      - name: vcluster
        in: query
        description: The virtual cluster filter
        required: false
        schema:
          type: string
      - name: name
        in: query
        description: The name filter
        required: false
        schema:
          type: string
      - name: showDefaults
        in: query
        description: Whether to show default values or not
        required: false
        schema:
          default: false
          type: boolean
        example: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AliasTopic'
              example:
              - kind: AliasTopic
                apiVersion: gateway/v2
                metadata:
                  name: name1
                  vCluster: vCluster1
                spec:
                  physicalName: physicalName1
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: The request is not valid
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '404':
          description: The given virtual cluster does not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: Virtual cluster vCluster1 not found.
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request GET \
            --url 'http://localhost:8888/gateway/v2/alias-topic?showDefaults=false' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y'
    put:
      tags:
      - cli_alias-topic_gateway_v2_8
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Upsert an alias topic in a virtual cluster

      operationId: Upsert an alias topic
      parameters:
      - name: dryMode
        in: query
        description: Whether to simulate the operation or not
        required: false
        schema:
          default: false
          type: boolean
        example: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AliasTopic'
            example:
              kind: AliasTopic
              apiVersion: gateway/v2
              metadata:
                name: name1
                vCluster: vCluster1
              spec:
                physicalName: physicalName1
        required: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplyResult_AliasTopic'
              example:
                resource:
                  kind: AliasTopic
                  apiVersion: gateway/v2
                  metadata:
                    name: name1
                    vCluster: vCluster1
                  spec:
                    physicalName: physicalName1
                upsertResult: Updated
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: The request is not valid
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '403':
          description: The required feature is not included in the current license
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Forbidden'
              example:
                title: The required feature is not included in the current license
        '404':
          description: The given virtual cluster or physical topic does not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              examples:
                Example0:
                  value:
                    title: Virtual cluster vCluster1 not found.
                Example1:
                  value:
                    title: Physical topic physicalName1 not found.
        '409':
          description: |2

            The virtual cluster is of type Standard and does not target main physical cluster
            The virtual cluster is of type Partner and does not target a valid physical cluster
            The physical cluster of an alias topic cannot be changed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conflict'
              example:
                title: |2

                  The virtual cluster is of type Standard and does not target main physical cluster
                  The virtual cluster is of type Partner and does not target a valid physical cluster
                  The physical cluster of an alias topic cannot be changed
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request PUT \
            --url 'http://localhost:8888/gateway/v2/alias-topic?dryMode=false' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
            --header 'Content-Type: application/json' \
            --data-raw '{
            "kind" : "AliasTopic",
            "apiVersion" : "gateway/v2",
            "metadata" : {
              "name" : "name1",
              "vCluster" : "vCluster1"
            },
            "spec" : {
              "physicalName" : "physicalName1"
            }
          }'
    delete:
      tags:
      - cli_alias-topic_gateway_v2_8
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Delete an alias topic in a virtual cluster

      operationId: Delete an alias topic
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AliasTopicId'
        required: true
      responses:
        '204':
          description: ''
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: The request is not valid
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '404':
          description: The given alias topic does not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: Alias topic name1 not found.
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request DELETE \
            --url 'http://localhost:8888/gateway/v2/alias-topic' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
            --header 'Content-Type: application/json' \
            --data-raw '{
            "name" : "name1",
            "vCluster" : "vCluster1"
          }'
  /gateway/v2/concentrated-topic:
    get:
      tags:
      - cli_concentrated-topic_gateway_v2_0
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        List the concentrated topics of a virtual cluster.

      operationId: List the concentrated topics
      parameters:
      - name: vcluster
        in: query
        description: The virtual cluster filter
        required: false
        schema:
          type: string
      - name: name
        in: query
        description: The name filter
        required: false
        schema:
          type: string
      - name: showDefaults
        in: query
        description: Whether to show default values or not
        required: false
        schema:
          default: false
          type: boolean
        example: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ConcentratedTopic'
              example:
              - kind: ConcentratedTopic
                apiVersion: gateway/v2
                metadata:
                  name: name1
                  vCluster: vCluster1
                spec:
                  physicalName: physicalName1
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: The request is not valid
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '404':
          description: The given virtual cluster does not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: The given virtual cluster does not exist
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request GET \
            --url 'http://localhost:8888/gateway/v2/concentrated-topic?showDefaults=false' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y'
  /gateway/v2/concentration-rule:
    get:
      tags:
      - cli_concentration-rule_gateway_v2_9
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        List the concentration rules of a virtual cluster

      operationId: List the concentration rules
      parameters:
      - name: vcluster
        in: query
        description: The virtual cluster filter
        required: false
        schema:
          type: string
      - name: name
        in: query
        description: The name filter
        required: false
        schema:
          type: string
      - name: showDefaults
        in: query
        description: Whether to show default values or not
        required: false
        schema:
          default: false
          type: boolean
        example: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ConcentrationRule'
              example:
              - kind: ConcentrationRule
                apiVersion: gateway/v2
                metadata:
                  name: concentrationRule1
                  vCluster: vCluster1
                spec:
                  pattern: topic.*
                  physicalTopics:
                    delete: topic
                    compact: compact_topic
                    deleteCompact: compact_delete_topic
                  autoManaged: false
                  offsetCorrectness: false
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: The request is not valid
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '404':
          description: The given virtual cluster does not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: The given virtual cluster does not exist
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request GET \
            --url 'http://localhost:8888/gateway/v2/concentration-rule?showDefaults=false' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y'
    put:
      tags:
      - cli_concentration-rule_gateway_v2_9
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Upsert a concentration rule in a virtual cluster

      operationId: Upsert a concentration rule
      parameters:
      - name: dryMode
        in: query
        description: Whether to simulate the operation or not
        required: false
        schema:
          default: false
          type: boolean
        example: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConcentrationRule'
            example:
              kind: ConcentrationRule
              apiVersion: gateway/v2
              metadata:
                name: concentrationRule1
                vCluster: vCluster1
              spec:
                pattern: topic.*
                physicalTopics:
                  delete: topic
                  compact: compact_topic
                  deleteCompact: compact_delete_topic
                autoManaged: false
                offsetCorrectness: false
        required: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplyResult_ConcentrationRule'
              example:
                resource:
                  kind: ConcentrationRule
                  apiVersion: gateway/v2
                  metadata:
                    name: concentrationRule1
                    vCluster: vCluster1
                  spec:
                    pattern: topic.*
                    physicalTopics:
                      delete: topic
                      compact: compact_topic
                      deleteCompact: compact_delete_topic
                    autoManaged: false
                    offsetCorrectness: false
                upsertResult: Created
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: The request is not valid
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '403':
          description: The required feature is not included in the current license
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Forbidden'
              example:
                title: The required feature is not included in the current license
        '404':
          description: The given virtual cluster does not exist or one of the physical
            topics does not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: The given virtual cluster does not exist or one of the physical
                  topics does not exist
        '409':
          description: One of the physical topics exists with an incompatible cleanup.policy
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conflict'
              example:
                title: One of the physical topics exists with an incompatible cleanup.policy
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request PUT \
            --url 'http://localhost:8888/gateway/v2/concentration-rule?dryMode=false' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
            --header 'Content-Type: application/json' \
            --data-raw '{
            "kind" : "ConcentrationRule",
            "apiVersion" : "gateway/v2",
            "metadata" : {
              "name" : "concentrationRule1",
              "vCluster" : "vCluster1"
            },
            "spec" : {
              "pattern" : "topic.*",
              "physicalTopics" : {
                "delete" : "topic",
                "compact" : "compact_topic",
                "deleteCompact" : "compact_delete_topic"
              },
              "autoManaged" : false,
              "offsetCorrectness" : false
            }
          }'
    delete:
      tags:
      - cli_concentration-rule_gateway_v2_9
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Delete a concentration rule in a virtual cluster

      operationId: Delete a concentration rule
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConcentrationRuleId'
            example:
              name: concentrationRule1
              vCluster: vCluster1
        required: true
      responses:
        '204':
          description: ''
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: The request is not valid
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '404':
          description: The given name does not exist in the given virtual cluster
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: The given name does not exist in the given virtual cluster
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request DELETE \
            --url 'http://localhost:8888/gateway/v2/concentration-rule' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
            --header 'Content-Type: application/json' \
            --data-raw '{
            "name" : "concentrationRule1",
            "vCluster" : "vCluster1"
          }'
  /gateway/v2/interceptor:
    get:
      tags:
      - cli_interceptor_gateway_v2_12
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        List the interceptors

      operationId: List the interceptors
      parameters:
      - name: name
        in: query
        description: Filter by name
        required: false
        schema:
          type: string
      - name: global
        in: query
        description: Keep only global interceptors
        required: false
        schema:
          type: boolean
      - name: vcluster
        in: query
        description: Filter by virtual cluster
        required: false
        schema:
          type: string
      - name: group
        in: query
        description: Filter by group
        required: false
        schema:
          type: string
      - name: username
        in: query
        description: Filter by service account
        required: false
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                uniqueItems: true
                items:
                  $ref: '#/components/schemas/Interceptor'
              example:
              - kind: Interceptor
                apiVersion: gateway/v2
                metadata:
                  name: yellow_cars_filter
                  scope:
                    vCluster: vCluster1
                spec:
                  comment: Filter yellow cars
                  pluginClass: io.conduktor.gateway.interceptor.VirtualSqlTopicPlugin
                  priority: 1
                  config:
                    virtualTopic: yellow_cars
                    statement: SELECT '$.type' as type, '$.price' as price FROM cars
                      WHERE '$.color' = 'yellow'
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: The request is not valid
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request GET \
            --url 'http://localhost:8888/gateway/v2/interceptor?name=interceptor-name&global=true&vcluster=passthrough&group=group1&username=user1' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y'
    put:
      tags:
      - cli_interceptor_gateway_v2_12
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Upsert an interceptor

      operationId: Upsert an interceptor
      parameters:
      - name: dryMode
        in: query
        description: Whether to simulate the operation or not
        required: false
        schema:
          default: false
          type: boolean
        example: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Interceptor'
            example:
              kind: Interceptor
              apiVersion: gateway/v2
              metadata:
                name: yellow_cars_filter
                scope:
                  vCluster: vCluster1
              spec:
                comment: Filter yellow cars
                pluginClass: io.conduktor.gateway.interceptor.VirtualSqlTopicPlugin
                priority: 1
                config:
                  virtualTopic: yellow_cars
                  statement: SELECT '$.type' as type, '$.price' as price FROM cars
                    WHERE '$.color' = 'yellow'
        required: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplyResult_Interceptor'
              example:
                resource:
                  kind: Interceptor
                  apiVersion: gateway/v2
                  metadata:
                    name: yellow_cars_filter
                    scope:
                      vCluster: vCluster1
                  spec:
                    comment: Filter yellow cars
                    pluginClass: io.conduktor.gateway.interceptor.VirtualSqlTopicPlugin
                    priority: 1
                    config:
                      virtualTopic: yellow_cars
                      statement: SELECT '$.type' as type, '$.price' as price FROM
                        cars WHERE '$.color' = 'yellow'
                upsertResult: Created
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: The request is not valid
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '403':
          description: The plugin requires a feature not included in the current license
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Forbidden'
              example:
                title: The plugin requires a feature not included in the current license
        '404':
          description: The virtual cluster or the group specified in the scope does
            not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: The virtual cluster or the group specified in the scope does
                  not exist
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request PUT \
            --url 'http://localhost:8888/gateway/v2/interceptor?dryMode=false' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
            --header 'Content-Type: application/json' \
            --data-raw '{
            "kind" : "Interceptor",
            "apiVersion" : "gateway/v2",
            "metadata" : {
              "name" : "yellow_cars_filter",
              "scope" : {
                "vCluster" : "vCluster1",
                "group" : null,
                "username" : null
              }
            },
            "spec" : {
              "comment" : "Filter yellow cars",
              "pluginClass" : "io.conduktor.gateway.interceptor.VirtualSqlTopicPlugin",
              "priority" : 1,
              "config" : {
                "virtualTopic" : "yellow_cars",
                "statement" : "SELECT \'$.type\' as type, \'$.price\' as price FROM cars WHERE \'$.color\' = \'yellow\'"
              }
            }
          }'
  /gateway/v2/interceptor/{name}:
    delete:
      tags:
      - cli_interceptor_gateway_v2_12
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Delete an interceptor

      operationId: Delete an interceptor
      parameters:
      - name: name
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InterceptorScope'
        required: false
      responses:
        '204':
          description: ''
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: The request is not valid
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '404':
          description: The given interceptor does not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: The given interceptor does not exist
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request DELETE \
            --url 'http://localhost:8888/gateway/v2/interceptor/yellow_cars_filter' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
            --header 'Content-Type: application/json' \
            --data-raw '{
            "vCluster" : "vCluster1",
            "group" : null,
            "username" : null
          }'
  /gateway/v2/interceptor/resolve:
    post:
      tags:
      - cli_interceptor_gateway_v2_12
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        A utility endpoint to resolve the interceptors for a given virtual cluster, groups and username.
        Helps to understand which interceptors will be applied for a given request.

      operationId: Resolve interceptors
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InterceptorResolverRequest'
        required: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                uniqueItems: true
                items:
                  $ref: '#/components/schemas/Interceptor'
              example:
              - kind: Interceptor
                apiVersion: gateway/v2
                metadata:
                  name: yellow_cars_filter
                  scope:
                    vCluster: vCluster1
                spec:
                  comment: Filter yellow cars
                  pluginClass: io.conduktor.gateway.interceptor.VirtualSqlTopicPlugin
                  priority: 1
                  config:
                    virtualTopic: yellow_cars
                    statement: SELECT '$.type' as type, '$.price' as price FROM cars
                      WHERE '$.color' = 'yellow'
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: The request is not valid
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request POST \
            --url 'http://localhost:8888/gateway/v2/interceptor/resolve' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
            --header 'Content-Type: application/json' \
            --data-raw '{
            "vCluster" : "passthrough",
            "groups" : [
              "group1",
              "group2"
            ],
            "username" : "user1"
          }'
  /gateway/v2/plugin:
    get:
      tags:
      - plugin
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        List the available plugins of the gateway

      operationId: List the Plugins of the Gateway
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                uniqueItems: true
                items:
                  $ref: '#/components/schemas/Plugin'
              example:
              - plugin: io.conduktor.gateway.interceptor.chaos.SimulateSlowProducersConsumersPlugin
                pluginId: io.conduktor.gateway.interceptor.chaos.SimulateSlowProducersConsumersPlugin
                readme: |2+

                  ---
                  version: ${project.version}
                  title: Simulate Slow Producers and Consumers
                  description: Validate your application behaves correctly when there are delays in responses from the Kafka cluster.
                  parent: console
                  license: enterprise
                  ---

                  ## Introduction

                  This interceptor slows responses from the brokers.

                  It will operate only on a set of topics rather than all traffic.

                  This interceptor only works on Produce requests and Fetch requests.

                  ## Configuration

                  | key           | type    | default | description                                                     |
                  |:--------------|:--------|:--------|:----------------------------------------------------------------|
                  | topic         | String  | `.*`    | Topics that match this regex will have the interceptor applied. |
                  | rateInPercent | int     |         | The percentage of requests that will apply this interceptor     |
                  | minLatencyMs  | int     |         | Minimum for the random response latency in milliseconds         |
                  | maxLatencyMs  | int     |         | Maximum for the random response latency in milliseconds         |

                  ## Example

                  ```json
                  {
                    "name": "mySimulateSlowProducersConsumersInterceptor",
                    "pluginClass": "io.conduktor.gateway.interceptor.chaos.SimulateSlowProducersConsumersPlugin",
                    "priority": 100,
                    "config": {
                      "rateInPercent": 100,
                      "minLatencyMs": 50,
                      "maxLatencyMs": 1200
                    }
                  }
                  ```

                parent: Console
                license: enterprise
                description: Validate your application behaves correctly when broker
                  errors occur.
                title: Broker errors
                version: 3.0.1
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request GET \
            --url 'http://localhost:8888/gateway/v2/plugin' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y'
  /gateway/v2/service-account:
    get:
      tags:
      - cli_gateway-service-account_gateway_v2_10
      description: |2+


        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        List the service accounts

      operationId: List the service accounts
      parameters:
      - name: vcluster
        in: query
        description: Filter by virtual cluster
        required: false
        schema:
          type: string
      - name: name
        in: query
        description: Filter by name
        required: false
        schema:
          type: string
      - name: type
        in: query
        description: Filter by type (External or Local)
        required: false
        schema:
          type: string
      - name: showDefaults
        in: query
        description: Whether to show default values or not
        required: false
        schema:
          default: false
          type: boolean
        example: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GatewayServiceAccount'
              example:
              - kind: GatewayServiceAccount
                apiVersion: gateway/v2
                metadata:
                  name: user1
                  vCluster: vcluster1
                spec:
                  type: EXTERNAL
                  externalNames:
                  - externalName
              - kind: GatewayServiceAccount
                apiVersion: gateway/v2
                metadata:
                  name: user1
                  vCluster: vcluster1
                spec:
                  type: LOCAL
        '400':
          description: 'Service accounts are not supported: requires a SASL listener,
            mTLS, or Kafka managed security mode.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: 'Service accounts are not supported: requires a SASL listener,
                  mTLS, or Kafka managed security mode.'
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request GET \
            --url 'http://localhost:8888/gateway/v2/service-account?vcluster=vCluster1&name=user1&type=External&showDefaults=false' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y'
    put:
      tags:
      - cli_gateway-service-account_gateway_v2_10
      description: |2+


        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Upsert a service account

      operationId: Upsert a service account
      parameters:
      - name: dryMode
        in: query
        description: Whether to simulate the operation or not
        required: false
        schema:
          default: false
          type: boolean
        example: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GatewayServiceAccount'
            example:
              kind: GatewayServiceAccount
              apiVersion: gateway/v2
              metadata:
                name: user1
                vCluster: vcluster1
              spec:
                type: EXTERNAL
                externalNames:
                - externalName
        required: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplyResult_GatewayServiceAccount'
              example:
                resource:
                  kind: GatewayServiceAccount
                  apiVersion: gateway/v2
                  metadata:
                    name: user1
                    vCluster: vcluster1
                  spec:
                    type: EXTERNAL
                    externalNames:
                    - externalName
                upsertResult: Created
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              examples:
                Example0:
                  value:
                    title: 'Service accounts are not supported: requires a SASL listener,
                      mTLS, or Kafka managed security mode.'
                Example1:
                  value:
                    title: Service account username ... does not match the pattern
                      ...
                Example2:
                  value:
                    title: Service account's virtual cluster ... does not match the
                      pattern ...
                Example3:
                  value:
                    title: Service account is external, it should have exactly one
                      external name...
                Example4:
                  value:
                    title: Only external service accounts can be used with Kafka managed
                      security mode.
                Example5:
                  value:
                    title: Local service accounts require a SASL listener. Only external
                      service accounts can be used with mTLS.
                Example6:
                  value:
                    title: External service accounts are reserved to OAuth, mTLS or
                      Kafka managed security mode.
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '403':
          description: The required feature is not included in the current license
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Forbidden'
              example:
                title: The required feature is not included in the current license
        '404':
          description: Virtual cluster ... not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: Virtual cluster ... not found.
        '409':
          description: Service account ... already exists in the given virtual cluster
            or the principal (...) is already taken.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conflict'
              example:
                title: Service account ... already exists in the given virtual cluster
                  or the principal (...) is already taken.
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request PUT \
            --url 'http://localhost:8888/gateway/v2/service-account?dryMode=false' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
            --header 'Content-Type: application/json' \
            --data-raw '{
            "kind" : "GatewayServiceAccount",
            "apiVersion" : "gateway/v2",
            "metadata" : {
              "name" : "user1",
              "vCluster" : "vcluster1"
            },
            "spec" : {
              "type" : "EXTERNAL",
              "externalNames" : [
                "externalName"
              ]
            }
          }'
    delete:
      tags:
      - cli_gateway-service-account_gateway_v2_10
      description: |2+


        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Delete a service account

      operationId: Delete a service account
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GatewayServiceAccountId'
        required: true
      responses:
        '204':
          description: ''
        '400':
          description: 'Service accounts are not supported: requires a SASL listener,
            mTLS, or Kafka managed security mode.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: 'Service accounts are not supported: requires a SASL listener,
                  mTLS, or Kafka managed security mode.'
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '404':
          description: The service account ... does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: Service accounts feature is not enabled.
        '409':
          description: The service account is still used by groups
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conflict'
              example:
                title: The service account is still used by groups
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request DELETE \
            --url 'http://localhost:8888/gateway/v2/service-account' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
            --header 'Content-Type: application/json' \
            --data-raw '{
            "name" : "user1"
          }'
  /gateway/v2/service-account/{vcluster}/{name}/scramcredential/{login}:
    post:
      tags:
      - cli_gateway-service-account_gateway_v2_10
      description: |2+


        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Add a SCRAM credential to a service account.

        The Gateway derives the verifier from the supplied password and stores only the verifier
        (salt, stored key, server key) — never the clear password. The `login` is the SASL username
        the client presents at handshake and must be globally unique across all virtual clusters.


        > **Note:** This endpoint requires the service accounts feature flag to be enabled.
        > Set `GATEWAY_FEATURE_FLAGS_SERVICE_ACCOUNTS=true` to enable this feature.

      operationId: Add a SCRAM credential
      parameters:
      - name: vcluster
        in: path
        required: true
        schema:
          type: string
      - name: name
        in: path
        required: true
        schema:
          type: string
      - name: login
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScramCredentialRequest'
            example:
              password: s3cr3t-password
              algorithm: SHA-512
              iterationCount: 4096
        required: true
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScramCredentialMetadata'
              example:
                login: user1v2
                algorithm: SHA-512
                iterationCount: 4096
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              examples:
                Example0:
                  value:
                    title: 'Service accounts are not supported: requires a SASL listener,
                      mTLS, or Kafka managed security mode.'
                Example1:
                  value:
                    title: The password must not be empty.
                Example2:
                  value:
                    title: The iteration count must be at least 4096.
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '404':
          description: The service account ... does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: Service accounts feature is not enabled.
        '409':
          description: The SCRAM login ... already exists, held by service account
            ... .
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conflict'
              example:
                title: The SCRAM login ... already exists, held by service account
                  ... .
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request POST \
            --url 'http://localhost:8888/gateway/v2/service-account/vCluster1/user1/scramcredential/user1v2' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
            --header 'Content-Type: application/json' \
            --data-raw '{
            "password" : "s3cr3t-password"
          }'
    delete:
      tags:
      - cli_gateway-service-account_gateway_v2_10
      description: |2+


        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Delete (revoke) a service account's SCRAM credential by its login.


        > **Note:** This endpoint requires the service accounts feature flag to be enabled.
        > Set `GATEWAY_FEATURE_FLAGS_SERVICE_ACCOUNTS=true` to enable this feature.

      operationId: Delete a SCRAM credential
      parameters:
      - name: vcluster
        in: path
        required: true
        schema:
          type: string
      - name: name
        in: path
        required: true
        schema:
          type: string
      - name: login
        in: path
        required: true
        schema:
          type: string
      responses:
        '204':
          description: ''
        '400':
          description: 'Service accounts are not supported: requires a SASL listener,
            mTLS, or Kafka managed security mode.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: 'Service accounts are not supported: requires a SASL listener,
                  mTLS, or Kafka managed security mode.'
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '404':
          description: The SCRAM login ... does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: Service accounts feature is not enabled.
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request DELETE \
            --url 'http://localhost:8888/gateway/v2/service-account/vCluster1/user1/scramcredential/user1v2' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y'
  /gateway/v2/service-account/{vcluster}/{name}/scramcredential:
    get:
      tags:
      - cli_gateway-service-account_gateway_v2_10
      description: |2+


        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        List a service account's SCRAM credentials. Returns metadata only — never key material.


        > **Note:** This endpoint requires the service accounts feature flag to be enabled.
        > Set `GATEWAY_FEATURE_FLAGS_SERVICE_ACCOUNTS=true` to enable this feature.

      operationId: List the SCRAM credentials
      parameters:
      - name: vcluster
        in: path
        required: true
        schema:
          type: string
      - name: name
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ScramCredentialMetadata'
              example:
              - login: user1v2
                algorithm: SHA-512
                iterationCount: 4096
        '400':
          description: 'Service accounts are not supported: requires a SASL listener,
            mTLS, or Kafka managed security mode.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: 'Service accounts are not supported: requires a SASL listener,
                  mTLS, or Kafka managed security mode.'
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '404':
          description: The service account ... does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: Service accounts feature is not enabled.
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request GET \
            --url 'http://localhost:8888/gateway/v2/service-account/vCluster1/user1/scramcredential' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y'
  /gateway/v2/group:
    get:
      tags:
      - cli_gateway-group_gateway_v2_11
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        List the groups

      operationId: List the groups
      parameters:
      - name: showDefaults
        in: query
        description: Whether to show default values or not
        required: false
        schema:
          default: false
          type: boolean
        example: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GatewayGroup'
              example:
              - kind: GatewayGroup
                apiVersion: gateway/v2
                metadata:
                  name: group1
                spec:
                  members:
                  - vCluster: vCluster1
                    name: serviceAccount1
                  - vCluster: vCluster2
                    name: serviceAccount2
                  - vCluster: vCluster3
                    name: serviceAccount3
                  externalGroups:
                  - GROUP_READER
                  - GROUP_WRITER
        '400':
          description: 'Invalid value for: query parameter showDefaults'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request GET \
            --url 'http://localhost:8888/gateway/v2/group?showDefaults=false' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y'
    put:
      tags:
      - cli_gateway-group_gateway_v2_11
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Upsert a group

      operationId: Upsert a group
      parameters:
      - name: dryMode
        in: query
        description: Whether to simulate the operation or not
        required: false
        schema:
          default: false
          type: boolean
        example: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GatewayGroup'
            example:
              kind: GatewayGroup
              apiVersion: gateway/v2
              metadata:
                name: group1
              spec:
                members:
                - vCluster: vCluster1
                  name: serviceAccount1
                - vCluster: vCluster2
                  name: serviceAccount2
                - vCluster: vCluster3
                  name: serviceAccount3
                externalGroups:
                - GROUP_READER
                - GROUP_WRITER
        required: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplyResult_GatewayGroup'
              example:
                resource:
                  kind: GatewayGroup
                  apiVersion: gateway/v2
                  metadata:
                    name: group1
                  spec:
                    members:
                    - vCluster: vCluster1
                      name: serviceAccount1
                    - vCluster: vCluster2
                      name: serviceAccount2
                    - vCluster: vCluster3
                      name: serviceAccount3
                    externalGroups:
                    - GROUP_READER
                    - GROUP_WRITER
                upsertResult: Updated
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: The request is not valid
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '403':
          description: The required feature is not included in the current license
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Forbidden'
              example:
                title: The required feature is not included in the current license
        '404':
          description: The group contains a service account that does not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: The group contains a service account that does not exist
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request PUT \
            --url 'http://localhost:8888/gateway/v2/group?dryMode=false' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
            --header 'Content-Type: application/json' \
            --data-raw '{
            "kind" : "GatewayGroup",
            "apiVersion" : "gateway/v2",
            "metadata" : {
              "name" : "group1"
            },
            "spec" : {
              "members" : [
                {
                  "vCluster" : "vCluster1",
                  "name" : "serviceAccount1"
                },
                {
                  "vCluster" : "vCluster2",
                  "name" : "serviceAccount2"
                },
                {
                  "vCluster" : "vCluster3",
                  "name" : "serviceAccount3"
                }
              ],
              "externalGroups" : [
                "GROUP_READER",
                "GROUP_WRITER"
              ]
            }
          }'
  /gateway/v2/group/{name}:
    get:
      tags:
      - cli_gateway-group_gateway_v2_11
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Get a group

      operationId: Get a group
      parameters:
      - name: name
        in: path
        required: true
        schema:
          type: string
      - name: showDefaults
        in: query
        description: Whether to show default values or not
        required: false
        schema:
          default: false
          type: boolean
        example: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayGroup'
              example:
                kind: GatewayGroup
                apiVersion: gateway/v2
                metadata:
                  name: group1
                spec:
                  members:
                  - vCluster: vCluster1
                    name: serviceAccount1
                  - vCluster: vCluster2
                    name: serviceAccount2
                  - vCluster: vCluster3
                    name: serviceAccount3
                  externalGroups:
                  - GROUP_READER
                  - GROUP_WRITER
        '400':
          description: 'Invalid value for: query parameter showDefaults'
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '404':
          description: The given group does not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: The given group does not exist
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request GET \
            --url 'http://localhost:8888/gateway/v2/group/group1?showDefaults=false' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y'
    delete:
      tags:
      - cli_gateway-group_gateway_v2_11
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Delete a group

      operationId: Delete a group
      parameters:
      - name: name
        in: path
        required: true
        schema:
          type: string
      responses:
        '204':
          description: ''
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '404':
          description: The given group does not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              example:
                title: The given group does not exist
        '409':
          description: The group is still referenced by interceptors
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conflict'
              example:
                title: The group is still referenced by interceptors
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request DELETE \
            --url 'http://localhost:8888/gateway/v2/group/group1' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y'
  /gateway/v2/analytics/lived:
    get:
      tags:
      - analytics
      description: |2+

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Get Gateway Lived event data

        Provides real-time insights into the state of interceptors on the Gateway, including their types, instances, and topics covered.
        Tracks metrics such as service accounts, groups, alias topics, and concentrated topics, enabling better monitoring of Gateway usage patterns.

      operationId: Get Gateway Lived event data
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayLivedEvent'
              example:
                interceptors:
                - className: io.conduktor.gateway.interceptor.FieldLevelDataMaskingPlugin
                  instanceCount: 2
                  topicsCovered: 10
                - className: io.conduktor.gateway.interceptor.AnotherPluginClassName
                  instanceCount: 5
                  topicsCovered: 3
                totalInterceptorTypes: 2
                totalInterceptorInstances: 7
                uniqueTopicsCovered: 13
                totalGatewayServiceAccounts: 10
                totalGatewayGroups: 10
                totalAliasTopics: 12
                totalConcentratedTopics: 0
                totalVirtualClusters: 3
                os: Linux
                isDocker: true
                isKubernetes: false
                gatewayVersion: 1.0.0
                gatewayCommit: abc123
                deploymentMethod: DOCKER
                deploymentMethodVersion: 20.10.12
                sub: user123
                plan: enterprise
                kafkaClusterId: kafka-cluster
                kafkaSecurityProtocol: SASL_SSL
                kafkaSaslMechanism: SCRAM-SHA-256
                gatewaySecurityProtocol: PLAINTEXT,SASL_SSL
                gatewaySaslMechanism: SCRAM-SHA-256
                gatewaySecurityMode: GATEWAY_MANAGED
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: The request is not valid
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request GET \
            --url 'http://localhost:8888/gateway/v2/analytics/lived' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y'
  /gateway/v2/cluster-switching:
    post:
      tags:
      - cluster-switching
      description: |2+


        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Switch the Gateway's underlying Kafka cluster by replacing the connection properties of a physical cluster with properties from another cluster.

        This operation allows you to dynamically switch the backend Kafka cluster that the Gateway connects to without restarting the service.

      operationId: Switch cluster
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClusterSwitchingRequest'
            example:
              fromPhysicalCluster: main
              toPhysicalCluster: backup
        required: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplyResult_ClusterSwitchingResponse'
              example:
                resource:
                  message: Cluster switched successfully
                  fromPhysicalCluster: main
                  toPhysicalCluster: backup
                upsertResult: Updated
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: The request is not valid
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '403':
          description: The required feature is not included in the current license
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Forbidden'
              example:
                title: The required feature is not included in the current license
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request POST \
            --url 'http://localhost:8888/gateway/v2/cluster-switching' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
            --header 'Content-Type: application/json' \
            --data-raw '{"fromPhysicalCluster":"main","toPhysicalCluster":"backup"}'
  /gateway/v2/cluster-switching/check:
    get:
      tags:
      - cluster-switching
      description: Check which physical cluster is currently active (main or failover)
      operationId: Check active cluster
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActiveClusterResponse'
              example:
                activePhysicalCluster: main
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
  /gateway/v2/topic-view:
    get:
      tags:
      - cli_topic-view_gateway_v2_13
      description: |2

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        List the topic views of a virtual cluster.
      operationId: List the topic views
      parameters:
      - name: vcluster
        in: query
        description: The virtual cluster filter
        required: false
        schema:
          type: string
      - name: name
        in: query
        description: The name filter
        required: false
        schema:
          type: string
      - name: showDefaults
        in: query
        description: Whether to show default values or not
        required: false
        schema:
          default: false
          type: boolean
        example: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TopicView'
              example:
              - kind: TopicView
                apiVersion: gateway/v2
                metadata:
                  name: pending-orders
                  vCluster: vCluster1
                spec:
                  transformation:
                    type: sql
                    statement: SELECT * FROM orders WHERE status = 'pending'
                  onError:
                    type: DROP
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: The request is not valid
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '404':
          description: The topic view feature is disabled, or the given virtual cluster
            does not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              examples:
                Example0:
                  value:
                    title: Topic view feature is not enabled.
                Example1:
                  value:
                    title: Virtual cluster vCluster1 not found.
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request GET \
            --url 'http://localhost:8888/gateway/v2/topic-view?showDefaults=false' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y'
    put:
      tags:
      - cli_topic-view_gateway_v2_13
      description: |2

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Upsert a topic view in a virtual cluster.
      operationId: Upsert a topic view
      parameters:
      - name: dryMode
        in: query
        description: Whether to simulate the operation or not
        required: false
        schema:
          default: false
          type: boolean
        example: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TopicView'
            example:
              kind: TopicView
              apiVersion: gateway/v2
              metadata:
                name: pending-orders
                vCluster: vCluster1
              spec:
                transformation:
                  type: sql
                  statement: SELECT * FROM orders WHERE status = 'pending'
                onError:
                  type: DROP
        required: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplyResult_TopicView'
              example:
                resource:
                  kind: TopicView
                  apiVersion: gateway/v2
                  metadata:
                    name: pending-orders
                    vCluster: vCluster1
                  spec:
                    transformation:
                      type: sql
                      statement: SELECT * FROM orders WHERE status = 'pending'
                    onError:
                      type: DROP
                upsertResult: Updated
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              examples:
                Example0:
                  value:
                    title: 'Invalid SQL statement: must be a SELECT statement with
                      a FROM clause.'
                Example1:
                  value:
                    title: Unknown schema registry connection 'DEFAULT_SR' for topic
                      view 'pending-orders'.
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '403':
          description: The required feature is not included in the current license
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Forbidden'
              example:
                title: The required feature is not included in the current license
        '404':
          description: The topic view feature is disabled, or the given virtual cluster
            or physical topic does not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              examples:
                Example0:
                  value:
                    title: Topic view feature is not enabled.
                Example1:
                  value:
                    title: Virtual cluster vCluster1 not found.
                Example2:
                  value:
                    title: Physical topic orders not found.
        '409':
          description: Business rule violation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Conflict'
              examples:
                Example0:
                  value:
                    title: A different type of logical topic (eg alias or concentrated)
                      already exists with this name.
                Example1:
                  value:
                    title: physicalCluster is not configured.
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request PUT \
            --url 'http://localhost:8888/gateway/v2/topic-view?dryMode=false' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
            --header 'Content-Type: application/json' \
            --data-raw '{
            "kind" : "TopicView",
            "apiVersion" : "gateway/v2",
            "metadata" : {
              "name" : "pending-orders",
              "vCluster" : "vCluster1"
            },
            "spec" : {
              "transformation" : {
                "type" : "sql",
                "statement" : "SELECT * FROM orders WHERE status = \'pending\'"
              },
              "onError" : {
                "type" : "DROP"
              }
            }
          }'
    delete:
      tags:
      - cli_topic-view_gateway_v2_13
      description: |2

        [![Generally Available](https://img.shields.io/badge/Lifecycle-Generally%20Available-blue)](#tag/Versioning)

        Delete a topic view in a virtual cluster.
      operationId: Delete a topic view
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TopicViewId'
        required: true
      responses:
        '204':
          description: ''
        '400':
          description: The request is not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequest'
              example:
                title: The request is not valid
        '401':
          description: The given credentials are not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
              example:
                title: The given credentials are not valid
        '404':
          description: The topic view feature is disabled, or the given topic view
            does not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
              examples:
                Example0:
                  value:
                    title: Topic view feature is not enabled.
                Example1:
                  value:
                    title: Topic view pending-orders not found.
        '500':
          description: An unexpected error occurred in the server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
              example:
                title: An unexpected error occurred in the server
      security:
      - httpAuth: []
      x-codeSamples:
      - lang: Shell
        source: |-
          curl \
            --request DELETE \
            --url 'http://localhost:8888/gateway/v2/topic-view' \
            --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
            --header 'Content-Type: application/json' \
            --data-raw '{
            "name" : "pending-orders",
            "vCluster" : "vCluster1"
          }'
components:
  schemas:
    AclBinding:
      title: AclBinding
      type: object
      required:
      - resourcePattern
      - principal
      - host
      - operation
      - permissionType
      properties:
        resourcePattern:
          $ref: '#/components/schemas/ResourcePattern'
        principal:
          description: |2

            Who or what the ACL applies to.
              -  Exactly maps onto the principal on the Java API
              -  Examples might include `User:alice` or `User:*` (wildcard for all users)
          type: string
        host:
          type: string
        operation:
          $ref: '#/components/schemas/AclOperation'
        permissionType:
          $ref: '#/components/schemas/AclPermissionType'
    AclOperation:
      title: AclOperation
      type: string
      enum:
      - ALL
      - ALTER
      - ALTER_CONFIGS
      - ANY
      - CLUSTER_ACTION
      - CREATE
      - CREATE_TOKENS
      - DELETE
      - DESCRIBE
      - DESCRIBE_CONFIGS
      - DESCRIBE_TOKENS
      - IDEMPOTENT_WRITE
      - READ
      - UNKNOWN
      - WRITE
    AclPermissionType:
      title: AclPermissionType
      type: string
      enum:
      - ALLOW
      - DENY
    ActiveClusterResponse:
      title: ActiveClusterResponse
      type: object
      required:
      - activePhysicalCluster
      properties:
        activePhysicalCluster:
          type: string
    AliasTopic:
      title: AliasTopic
      type: object
      required:
      - kind
      - apiVersion
      - metadata
      - spec
      properties:
        kind:
          description: The kind of the alias topic
          type: string
        apiVersion:
          description: The api version of the alias topic
          type: string
        metadata:
          $ref: '#/components/schemas/AliasTopicMetadata'
        spec:
          $ref: '#/components/schemas/AliasTopicSpec'
    AliasTopicId:
      title: AliasTopicId
      type: object
      required:
      - name
      properties:
        name:
          description: The name of the alias topic
          type: string
        vCluster:
          description: 'The virtual cluster of the alias topic (default: `passthrough`)'
          type: string
    AliasTopicMetadata:
      title: AliasTopicMetadata
      description: The metadata of the alias topic
      type: object
      required:
      - name
      properties:
        name:
          description: The name of the alias topic
          type: string
          format: ^[a-zA-Z0-9._-]+$
        vCluster:
          description: 'The virtual cluster of the alias topic (default: `passthrough`)'
          type: string
          format: ^[a-zA-Z0-9._-]+$
    AliasTopicSpec:
      title: AliasTopicSpec
      description: The specification of the alias topic
      type: object
      required:
      - physicalName
      properties:
        physicalName:
          description: The physical name of the alias topic
          type: string
          format: ^[a-zA-Z0-9._-]+$
        physicalCluster:
          description: |2

            The physical kafka cluster hosting the physical topic.
            The field is optional and only useful for alias topics referencing __Partner__ virtual clusters.
            For alias topics linked to virtual clusters of type __Standard__, the physical cluster can only be "main" (automatically set to "main" if the field is missing).
            The physical cluster must be one of the configured list of physical clusters of the gateway.
          type: string
    ApplyResult_AliasTopic:
      title: ApplyResult_AliasTopic
      type: object
      required:
      - resource
      - upsertResult
      properties:
        resource:
          $ref: '#/components/schemas/AliasTopic'
          description: The resource that was upserted
        upsertResult:
          $ref: '#/components/schemas/UpsertResult'
    ApplyResult_ClusterSwitchingResponse:
      title: ApplyResult_ClusterSwitchingResponse
      type: object
      required:
      - resource
      - upsertResult
      properties:
        resource:
          $ref: '#/components/schemas/ClusterSwitchingResponse'
        upsertResult:
          $ref: '#/components/schemas/UpsertResult'
    ApplyResult_ConcentrationRule:
      title: ApplyResult_ConcentrationRule
      type: object
      required:
      - resource
      - upsertResult
      properties:
        resource:
          $ref: '#/components/schemas/ConcentrationRule'
          description: The resource that was upserted
        upsertResult:
          $ref: '#/components/schemas/UpsertResult'
    ApplyResult_GatewayGroup:
      title: ApplyResult_GatewayGroup
      type: object
      required:
      - resource
      - upsertResult
      properties:
        resource:
          $ref: '#/components/schemas/GatewayGroup'
          description: The resource that was upserted
        upsertResult:
          $ref: '#/components/schemas/UpsertResult'
    ApplyResult_GatewayServiceAccount:
      title: ApplyResult_GatewayServiceAccount
      type: object
      required:
      - resource
      - upsertResult
      properties:
        resource:
          $ref: '#/components/schemas/GatewayServiceAccount'
          description: The resource that was upserted
        upsertResult:
          $ref: '#/components/schemas/UpsertResult'
    ApplyResult_Interceptor:
      title: ApplyResult_Interceptor
      type: object
      required:
      - resource
      - upsertResult
      properties:
        resource:
          $ref: '#/components/schemas/Interceptor'
          description: The resource that was upserted
        upsertResult:
          $ref: '#/components/schemas/UpsertResult'
    ApplyResult_TopicView:
      title: ApplyResult_TopicView
      type: object
      required:
      - resource
      - upsertResult
      properties:
        resource:
          $ref: '#/components/schemas/TopicView'
          description: The resource that was upserted
        upsertResult:
          $ref: '#/components/schemas/UpsertResult'
    ApplyResult_VirtualCluster:
      title: ApplyResult_VirtualCluster
      type: object
      required:
      - resource
      - upsertResult
      properties:
        resource:
          $ref: '#/components/schemas/VirtualCluster'
          description: The resource that was upserted
        upsertResult:
          $ref: '#/components/schemas/UpsertResult'
    BadRequest:
      title: BadRequest
      type: object
      required:
      - title
      properties:
        title:
          type: string
        msg:
          type: string
        cause:
          type: string
    ClusterSwitchingRequest:
      title: ClusterSwitchingRequest
      type: object
      required:
      - fromPhysicalCluster
      - toPhysicalCluster
      properties:
        fromPhysicalCluster:
          type: string
        toPhysicalCluster:
          type: string
    ClusterSwitchingResponse:
      title: ClusterSwitchingResponse
      description: The resource that was upserted
      type: object
      required:
      - message
      - fromPhysicalCluster
      - toPhysicalCluster
      properties:
        message:
          type: string
        fromPhysicalCluster:
          type: string
        toPhysicalCluster:
          type: string
    ConcentratedTopic:
      title: ConcentratedTopic
      type: object
      required:
      - kind
      - apiVersion
      - metadata
      - spec
      properties:
        kind:
          description: The kind of the concentrated topic
          type: string
        apiVersion:
          description: The api version of the concentrated topic
          type: string
        metadata:
          $ref: '#/components/schemas/ConcentratedTopicMetadata'
        spec:
          $ref: '#/components/schemas/ConcentratedTopicSpec'
    ConcentratedTopicMetadata:
      title: ConcentratedTopicMetadata
      description: The metadata of the concentrated topic
      type: object
      required:
      - name
      properties:
        name:
          description: The name of the concentrated topic
          type: string
        vCluster:
          description: The virtual cluster of the concentrated topic. If not provided,
            defaulted to passthrough virtual cluster.
          type: string
    ConcentratedTopicSpec:
      title: ConcentratedTopicSpec
      description: The specification of the concentrated topic
      type: object
      required:
      - physicalName
      properties:
        physicalName:
          description: The physical name of the concentrated topic
          type: string
    ConcentrationRule:
      title: ConcentrationRule
      type: object
      required:
      - kind
      - apiVersion
      - metadata
      - spec
      properties:
        kind:
          description: The kind of the concentration rule
          type: string
        apiVersion:
          description: The api version of the concentration rule
          type: string
        metadata:
          $ref: '#/components/schemas/ConcentrationRuleMetadata'
        spec:
          $ref: '#/components/schemas/ConcentrationRuleSpec'
    ConcentrationRuleId:
      title: ConcentrationRuleId
      type: object
      required:
      - name
      properties:
        name:
          description: The name of the concentration rule (identifier in a virtual
            cluster)
          type: string
        vCluster:
          description: The virtual cluster of the concentration rule. Default to `passthrough`
            if not provided.
          type: string
    ConcentrationRuleMetadata:
      title: ConcentrationRuleMetadata
      description: The metadata of the concentration rule
      type: object
      required:
      - name
      properties:
        name:
          description: The name of the concentration rule (identifier in a virtual
            cluster)
          type: string
          format: ^[a-zA-Z0-9._-]+$
        vCluster:
          description: The virtual cluster of the concentration rule. Default to `passthrough`
            if not provided.
          type: string
    ConcentrationRuleSpec:
      title: ConcentrationRuleSpec
      description: The specification of the concentration rule
      type: object
      required:
      - pattern
      - physicalTopics
      properties:
        pattern:
          description: The pattern of the concentration rule
          type: string
        physicalTopics:
          $ref: '#/components/schemas/PhysicalTopics'
        autoManaged:
          description: Whether the concentration rule is auto managed
          type: boolean
        offsetCorrectness:
          description: |2

            Deprecated since v3.21.0, planned for removal in v3.24.0. Set the offset management on/off for the logical topics created with this rule (default to false).
            Setting it on can have some impacts on the performances and the memory usage.
          deprecated: true
          type: boolean
    Conflict:
      title: Conflict
      type: object
      required:
      - title
      properties:
        title:
          type: string
        msg:
          type: string
        cause:
          type: string
    External:
      title: External
      type: object
      required:
      - kind
      - apiVersion
      - metadata
      - spec
      properties:
        kind:
          description: The kind of the service account
          type: string
        apiVersion:
          description: The api version of the service account
          type: string
        metadata:
          $ref: '#/components/schemas/ExternalMetadata'
        spec:
          $ref: '#/components/schemas/ExternalSpec'
    ExternalMetadata:
      title: ExternalMetadata
      description: Metadata of the service account
      type: object
      required:
      - name
      properties:
        name:
          description: The name of the service account (identifier)
          type: string
          format: ^[a-zA-Z0-9_.,=-]{3,64}$
        vCluster:
          description: |2

            The name of the virtual cluster the service account belongs to.

            If not provided, the service account will be created in the default `passthrough` virtual cluster.
          type: string
          format: ^[a-zA-Z0-9._-]+$
    ExternalSpec:
      title: ExternalSpec
      description: Spec of the service account
      type: object
      required:
      - type
      properties:
        externalNames:
          description: |2

             List of the external names of the service account.
             Used to keep a fixed reference of the service account in interceptors or groups if the values of the external user DB happen to change
             (ex: OIDC principal, key in delegated auth mode with Confluent etc...)
             At the moment, an external service account should have exactly one external name (The support for many external names will be available soon)
          type: array
          items:
            type: string
        type:
          description: 'The type of the service account : `LOCAL` or `EXTERNAL` (case
            insensitive)'
          type: string
          enum:
          - EXTERNAL
    Forbidden:
      title: Forbidden
      type: object
      required:
      - title
      properties:
        title:
          type: string
        msg:
          type: string
        cause:
          type: string
    GatewayGroup:
      title: GatewayGroup
      type: object
      required:
      - kind
      - apiVersion
      - metadata
      - spec
      properties:
        kind:
          description: The kind of the group
          type: string
        apiVersion:
          description: The api version of the group
          type: string
        metadata:
          $ref: '#/components/schemas/GroupMetadata'
        spec:
          $ref: '#/components/schemas/GroupSpec'
    GatewayLivedEvent:
      title: GatewayLivedEvent
      type: object
      required:
      - totalInterceptorTypes
      - totalInterceptorInstances
      - uniqueTopicsCovered
      - totalGatewayServiceAccounts
      - totalGatewayGroups
      - totalAliasTopics
      - totalConcentratedTopics
      - totalVirtualClusters
      properties:
        interceptors:
          type: array
          items:
            $ref: '#/components/schemas/InterceptorInfo'
        totalInterceptorTypes:
          type: integer
          format: int32
        totalInterceptorInstances:
          type: integer
          format: int32
        uniqueTopicsCovered:
          type: integer
          format: int32
        totalGatewayServiceAccounts:
          type: integer
          format: int32
        totalGatewayGroups:
          type: integer
          format: int32
        totalAliasTopics:
          type: integer
          format: int32
        totalConcentratedTopics:
          type: integer
          format: int32
        totalVirtualClusters:
          type: integer
          format: int32
        os:
          type: string
        isDocker:
          type: boolean
        isKubernetes:
          type: boolean
        gatewayVersion:
          type: string
        gatewayCommit:
          type: string
        deploymentMethod:
          type: string
        deploymentMethodVersion:
          type: string
        sub:
          type: string
        plan:
          type: string
        kafkaClusterId:
          type: string
        kafkaSecurityProtocol:
          type: string
        kafkaSaslMechanism:
          type: string
        gatewaySecurityProtocol:
          type: string
        gatewaySaslMechanism:
          type: string
        gatewaySecurityMode:
          type: string
    GatewayServiceAccount:
      title: GatewayServiceAccount
      oneOf:
      - $ref: '#/components/schemas/External'
      - $ref: '#/components/schemas/Local'
    GatewayServiceAccountId:
      title: GatewayServiceAccountId
      type: object
      required:
      - name
      properties:
        vCluster:
          description: |2

            The name of the virtual cluster the service account belongs to.

            If not provided, the service account will be created in the default `passthrough` virtual cluster.
          type: string
        name:
          description: The name of the service account (identifier)
          type: string
    GroupMetadata:
      title: GroupMetadata
      description: The metadata of the group
      type: object
      required:
      - name
      properties:
        name:
          description: The name of the group
          type: string
          format: ^[a-zA-Z0-9_-]{1,100}$
    GroupSpec:
      title: GroupSpec
      description: The specification of the group
      type: object
      properties:
        members:
          description: The service accounts belonging to the group
          type: array
          uniqueItems: true
          items:
            $ref: '#/components/schemas/GatewayServiceAccountId'
        externalGroups:
          description: The external groups (LDAP, OIDC...) mapped on the group
          type: array
          uniqueItems: true
          items:
            type: string
    Interceptor:
      title: Interceptor
      type: object
      required:
      - kind
      - apiVersion
      - metadata
      - spec
      properties:
        kind:
          description: The kind of the interceptor
          type: string
        apiVersion:
          description: The api version of the interceptor
          type: string
        metadata:
          $ref: '#/components/schemas/InterceptorMetadata'
        spec:
          $ref: '#/components/schemas/InterceptorSpec'
    InterceptorInfo:
      title: InterceptorInfo
      type: object
      required:
      - className
      - instanceCount
      - topicsCovered
      properties:
        className:
          type: string
        instanceCount:
          type: integer
          format: int32
        topicsCovered:
          type: integer
          format: int32
    InterceptorMetadata:
      title: InterceptorMetadata
      description: Metadata of the interceptor
      type: object
      required:
      - name
      properties:
        name:
          description: The name of the interceptor
          type: string
        scope:
          $ref: '#/components/schemas/InterceptorScope'
          description: |2

            The scope of the interceptor.
            It can be applied to a specific virtual cluster or group or username.
            If none of them is set, it will be applied Globally to the gateway.
    InterceptorResolverRequest:
      title: InterceptorResolverRequest
      type: object
      properties:
        vCluster:
          description: The virtual cluster to test the interceptors resolution
          type: string
        groups:
          description: The groups to test the interceptors resolution
          type: array
          items:
            type: string
        username:
          description: The username to test the interceptors resolution
          type: string
    InterceptorScope:
      title: InterceptorScope
      type: object
      properties:
        vCluster:
          description: An optional virtual cluster to filter the interceptors
          type: string
        group:
          description: An optional group to filter the interceptors
          type: string
        username:
          description: An optional username to filter the interceptors
          type: string
    InterceptorSpec:
      title: InterceptorSpec
      description: Spec of the interceptor
      type: object
      required:
      - pluginClass
      - priority
      - config
      properties:
        comment:
          description: An optional comment for the interceptor
          type: string
        pluginClass:
          description: The class of the plugin
          type: string
        priority:
          description: The priority of the interceptor
          type: integer
          format: int32
        config:
          $ref: '#/components/schemas/Map_Json'
    Local:
      title: Local
      type: object
      required:
      - kind
      - apiVersion
      - metadata
      - spec
      properties:
        kind:
          description: The kind of the service account
          type: string
        apiVersion:
          description: The api version of the service account
          type: string
        metadata:
          $ref: '#/components/schemas/LocalMetadata'
        spec:
          $ref: '#/components/schemas/LocalSpec'
    LocalMetadata:
      title: LocalMetadata
      description: Metadata of the service account
      type: object
      required:
      - name
      properties:
        name:
          description: The name of the service account (identifier)
          type: string
          format: ^[a-zA-Z0-9_.,=-]{3,64}$
        vCluster:
          description: |2

            The name of the virtual cluster the service account belongs to.

            If not provided, the service account will be created in the default `passthrough` virtual cluster.
          type: string
          format: ^[a-zA-Z0-9._-]+$
    LocalSpec:
      title: LocalSpec
      description: Spec of the service account
      type: object
      required:
      - type
      properties:
        type:
          description: 'The type of the service account : `LOCAL` or `EXTERNAL` (case
            insensitive)'
          type: string
          enum:
          - LOCAL
    Map_GatewayAuthenticationMode_V:
      title: Map_GatewayAuthenticationMode_V
      description: |2

        Depending on gateway config, different kind of authentication can be used:
          - `MTLS` : Both client and server use TLS certificates to authenticate each other.
          - `PLAIN` : The client uses a token generated by the gateway to authenticate (connection can be either SSL or PLAINTEXT).
          - `OAUTHBEARER` : The client uses an OIDC token generated by the gateway to authenticate (connection can be either SSL or PLAINTEXT).
        ClientProperties is a dictionary mapping supported authentication modes to their respective properties.
        It contains placeholders to replace with your actual values: {{username}}, {{password}}, etc.
      type: object
      additionalProperties:
        $ref: '#/components/schemas/Map_String'
    Map_Json:
      title: Map_Json
      description: The configuration of the interceptor
      type: object
      additionalProperties: {}
    Map_String:
      title: Map_String
      type: object
      additionalProperties:
        type: string
    NotFound:
      title: NotFound
      type: object
      required:
      - title
      properties:
        title:
          type: string
        msg:
          type: string
        cause:
          type: string
    OnErrorStrategy:
      title: OnErrorStrategy
      description: The error-handling strategy for records that fail the filter. Required.
        `type` must be `DROP` (drop failing records) or `FAIL_FETCH` (fail the whole
        fetch).
      type: object
      required:
      - type
      properties:
        type:
          $ref: '#/components/schemas/OnErrorStrategyType'
    OnErrorStrategyType:
      title: OnErrorStrategyType
      description: The error-handling strategy type. Must be DROP or FAIL_FETCH.
      type: string
      enum:
      - DROP
      - FAIL_FETCH
    PatternType:
      title: PatternType
      type: string
      enum:
      - ANY
      - LITERAL
      - MATCH
      - PREFIXED
      - UNKNOWN
    PhysicalTopics:
      title: PhysicalTopics
      description: The physical topics backing the concentrated logical topics
      type: object
      required:
      - delete
      properties:
        delete:
          description: |2

            The name of the physical topic to store the data of the concentrated topics created with a 'delete' policy.
            The topic must exist in the physical kafka cluster with a 'delete' cleanup.policy (except if you use the autoManaged mode)
          type: string
          format: ^[a-zA-Z0-9._-]+$
        compact:
          description: |2

            The name of the physical topic to store the data of the concentrated topics created with a 'compact' policy.
            If specified, the topic must exist in the physical kafka cluster with a 'compact' cleanup.policy (except if you use the autoManaged mode)
          type: string
          format: ^[a-zA-Z0-9._-]+$
        deleteCompact:
          description: |2

            The name of the physical topic to store the data of the concentrated topics created with a 'delete,compact' policy.
            If specified, the topic must exist in the physical kafka cluster with a 'delete,compact' cleanup.policy (except if you use the autoManaged mode)
          type: string
          format: ^[a-zA-Z0-9._-]+$
    Plugin:
      title: Plugin
      type: object
      required:
      - plugin
      - pluginId
      - readme
      properties:
        plugin:
          description: The name of the plugin
          type: string
        pluginId:
          description: The id of the plugin
          type: string
        readme:
          description: The readme of the plugin
          type: string
        parent:
          description: The parent of the plugin
          type: string
        license:
          description: The license of the plugin
          type: string
        description:
          description: The description of the plugin
          type: string
        title:
          description: The title of the plugin
          type: string
        version:
          description: The version of the plugin
          type: string
    ResourcePattern:
      title: ResourcePattern
      type: object
      required:
      - resourceType
      - name
      - patternType
      properties:
        resourceType:
          $ref: '#/components/schemas/ResourceType'
        name:
          description: |2

            The name or pattern matching the name associated with the resource.
              - Exactly maps onto the resource name on the Java API
              - Full examples might include the name of a user, topic, cluster or consumer group
              - Wildcards (ie `*`) are supported
          type: string
        patternType:
          $ref: '#/components/schemas/PatternType'
    ResourceType:
      title: ResourceType
      type: string
      enum:
      - ANY
      - CLUSTER
      - DELEGATION_TOKEN
      - GROUP
      - TOPIC
      - TRANSACTIONAL_ID
      - UNKNOWN
    ScramCredentialMetadata:
      title: ScramCredentialMetadata
      type: object
      required:
      - login
      - algorithm
      - iterationCount
      properties:
        login:
          description: The globally unique SCRAM login (the SASL username the client
            presents).
          type: string
        algorithm:
          description: SCRAM hash algorithm.
          type: string
          enum:
          - SHA-512
          - SHA-256
        iterationCount:
          description: Hash iteration count.
          type: integer
          format: int32
    ScramCredentialRequest:
      title: ScramCredentialRequest
      type: object
      required:
      - password
      properties:
        password:
          description: The clear password to derive the SCRAM verifier from. Never
            stored or logged.
          type: string
        algorithm:
          description: SCRAM hash algorithm. Defaults to SHA-512.
          type: string
          enum:
          - SHA-512
          - SHA-256
        iterationCount:
          description: Hash iteration count, between 4096 (the RFC 5802 minimum, also
            the default) and 16384 (Kafka's maximum).
          type: integer
          format: int32
    ServerError:
      title: ServerError
      type: object
      required:
      - title
      properties:
        title:
          type: string
        msg:
          type: string
        cause:
          type: string
    SqlTransformation:
      title: SqlTransformation
      type: object
      required:
      - type
      - statement
      properties:
        type:
          description: The type of transformation
          type: string
        statement:
          description: The SQL SELECT statement defining the topic filter. The FROM
            clause specifies the physical topic, and the WHERE clause defines the
            filter predicate.
          type: string
    TokenRequest:
      title: TokenRequest
      type: object
      required:
      - username
      - lifeTimeSeconds
      properties:
        vCluster:
          description: 'The name of the virtual cluster to create the token for. "passthrough
            if omitted" '
          type: string
        username:
          description: The username of the local service account to create the token
            for.
          type: string
        lifeTimeSeconds:
          description: The life time of the token in seconds.
          type: integer
          format: int64
    TokenResponse:
      title: TokenResponse
      type: object
      required:
      - token
      properties:
        token:
          description: The token created for the given username on the given virtual
            cluster.
          type: string
    TopicView:
      title: TopicView
      type: object
      required:
      - kind
      - apiVersion
      - metadata
      - spec
      properties:
        kind:
          description: The kind of the topic view
          type: string
        apiVersion:
          description: The api version of the topic view
          type: string
        metadata:
          $ref: '#/components/schemas/TopicViewMetadata'
        spec:
          $ref: '#/components/schemas/TopicViewSpec'
    TopicViewId:
      title: TopicViewId
      type: object
      required:
      - name
      properties:
        name:
          description: The name of the topic view (virtual topic name that clients
            will use)
          type: string
        vCluster:
          description: 'The virtual cluster of the topic view (default: `passthrough`)'
          type: string
    TopicViewMetadata:
      title: TopicViewMetadata
      description: The metadata of the topic view
      type: object
      required:
      - name
      properties:
        name:
          description: The name of the topic view (virtual topic name that clients
            will use)
          type: string
          format: ^[a-zA-Z0-9._-]+$
        vCluster:
          description: 'The virtual cluster of the topic view (default: `passthrough`)'
          type: string
          format: ^[a-zA-Z0-9._-]+$
    TopicViewSpec:
      title: TopicViewSpec
      description: The specification of the topic view
      type: object
      required:
      - transformation
      - onError
      properties:
        transformation:
          $ref: '#/components/schemas/Transformation'
        onError:
          $ref: '#/components/schemas/OnErrorStrategy'
        physicalCluster:
          description: |2

            The physical kafka cluster hosting the source topic referenced by the SQL `FROM` clause.
            Optional: when omitted, the source resolves to the main cluster.
          type: string
        schemaRegistryConnectionName:
          description: Schema-registry connection (an externalConnections entry) used
            to decode Avro/Protobuf/JSON-Schema records for this view. Omit for raw-JSON
            views.
          type: string
    Transformation:
      title: Transformation
      description: The transformation to apply to records from the source topic
      oneOf:
      - $ref: '#/components/schemas/SqlTransformation'
    Unauthorized:
      title: Unauthorized
      type: object
      required:
      - title
      properties:
        title:
          type: string
        msg:
          type: string
        cause:
          type: string
    UpsertResult:
      title: UpsertResult
      description: The result of the upsert operation (created, updated, not changed)
      type: string
      enum:
      - Created
      - NotChanged
      - Updated
    VirtualCluster:
      title: VirtualCluster
      type: object
      required:
      - kind
      - apiVersion
      - metadata
      - spec
      properties:
        kind:
          description: The kind of the virtual cluster
          type: string
        apiVersion:
          description: The api version of the virtual cluster
          type: string
        metadata:
          $ref: '#/components/schemas/VirtualClusterMetadata'
        spec:
          $ref: '#/components/schemas/VirtualClusterSpec'
    VirtualClusterMetadata:
      title: VirtualClusterMetadata
      description: Metadata of the virtual cluster
      type: object
      required:
      - name
      properties:
        name:
          description: The name of the virtual cluster
          type: string
          format: ^[a-zA-Z0-9._-]+$
    VirtualClusterSpec:
      title: VirtualClusterSpec
      description: Spec of the virtual cluster
      type: object
      properties:
        aclEnabled:
          description: |2

            Enable ACL checks on all Kafka API calls to this virtual cluster.
            Depending on the value of the `aclMode` field, acls are required to be set in different ways.
            See the `aclMode` field for more details.
          type: boolean
        aclMode:
          description: "\nDifferent `aclMode` values control how ACLs will be managed\
            \ on the virtual cluster\n  - `KAFKA_API` : ACLs must be managed by the\
            \ Kafka API as if the virtual cluster is a standard Kafka cluster. \n\
            Forbids `acls` field from being set.\n  - `REST_API` : ACLs must be managed\
            \ by this resource on the REST API using the `acls` field. \nRequires\
            \ `acls` list to be non-empty and `superUsers` must not be set.\n\nIf\
            \ `aclMode` is left unset the behaviour is different depending on the\
            \ value of the `aclEnabled` field\n  - `aclEnabled: true` : The system\
            \ will assume a default `aclMode` of `KAFKA_API`\n  - `aclEnabled: false`\
            \ : The `aclMode` is left unset and can be set in the future by the user\
            \ or the system. \nForbids `acls` and `superUsers` from being set.\n\n\
            Once `aclMode` is set (either by the user or the system) changing it is\
            \ forbidden.\n"
          type: string
        superUsers:
          description: "\nList of usernames for which the associated service accounts\
            \ in this virtual cluster can bypass ACLs. \n  - Must be set if the `aclMode`\
            \ field is set to `KAFKA_API`.\n  - Cannot be set if the `aclMode` field\
            \ is set to `REST_API`.\n  - The service accounts referenced by username\
            \ must be managed independently using the REST Service-Account API.\n"
          type: array
          items:
            type: string
        type:
          description: 'The type of the virtual cluster : Standard, Partner'
          type: string
        bootstrapServers:
          description: |2

            The bootstrap servers to create a connection to the virtual cluster.
            This field is automatically managed by the gateway
          type: string
        clientProperties:
          $ref: '#/components/schemas/Map_GatewayAuthenticationMode_V'
        acls:
          description: |2

            List of ACL bindings for the virtual cluster.
              - Must be set if the `aclMode` field is set to `REST_API`.
              - Cannot be set if `aclMode` field is set to `KAFKA_API`.
              - No validation will be done on the content of the acls (eg existence of users/topics etc)
          type: array
          uniqueItems: true
          items:
            $ref: '#/components/schemas/AclBinding'
  securitySchemes:
    httpAuth:
      type: http
      scheme: basic
x-tagGroups:
- name: 🐺 Conduktor Gateway API
  tags:
  - Introduction
  - Authentication
  - Kinds
  - Api Groups
  - Versioning
  - Conventions
- name: 🌉 gateway/v2
  tags:
  - cli_virtual-cluster_gateway_v2_7
  - cli_alias-topic_gateway_v2_8
  - cli_concentrated-topic_gateway_v2_0
  - cli_concentration-rule_gateway_v2_9
  - cli_interceptor_gateway_v2_12
  - plugin
  - cli_gateway-service-account_gateway_v2_10
  - cli_gateway-group_gateway_v2_11
  - token
  - analytics
  - cluster-switching
  - cli_topic-view_gateway_v2_13
