Kong Catalog Services API

Create and maintain a centralized catalog of all services running in your organization. Add custom fields and map resources from across your organization to provide a 360-degree overview of your services. Custom fields allow you to surface key information such as: - `Owner`: The person or team responsible for the service - `Product Manager`: The person assigned to guide the service's direction for customer success - `Jira Project`: The Jira project which represents past, present and future work for the service Resources are discovered from the integrations you use within your organization to create, operate and manage your services. Mapping the resources relevant to your service will provide a rich view of the service's communication channels, dependencies and more. Types of resources which you can map to a service include: - `Code Repositories:` The software project(s) that make up the service - `Monitors and Dashboards:` Tools providing visibility into the health and performance of the service - `Communication Channels`: Virtual spaces where questions and concerns can be raised about the service - `Incident Management Resources`: Alerts setup within your incident management platform to notify individuals regarding issues with the service

OpenAPI Specification

kong-catalog-services-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  contact:
    email: support@konghq.com
    name: Kong Inc
    url: https://konghq.com
  description: 'OpenAPI 3.0 spec for Kong Gateway''s Admin API.


    You can learn more about Kong Gateway at [developer.konghq.com](https://developer.konghq.com).

    Give Kong a star at the [Kong/kong](https://github.com/kong/kong) repository.'
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
  title: Kong Enterprise Admin ACLs Catalog Services API
  version: 3.14.0
servers:
- description: Default Admin API URL
  url: '{protocol}://{hostname}:{port}{path}'
  variables:
    hostname:
      default: localhost
      description: Hostname for Kong's Admin API
    path:
      default: /
      description: Base path for Kong's Admin API
    port:
      default: '8001'
      description: Port for Kong's Admin API
    protocol:
      default: http
      description: Protocol for requests to Kong's Admin API
      enum:
      - http
      - https
security:
- adminToken: []
tags:
- name: Catalog Services
  description: 'Create and maintain a centralized catalog of all services running in your organization.

    Add custom fields and map resources from across your organization to provide a 360-degree overview of your services.


    Custom fields allow you to surface key information such as:

    - `Owner`: The person or team responsible for the service

    - `Product Manager`: The person assigned to guide the service''s direction for customer success

    - `Jira Project`: The Jira project which represents past, present and future work for the service


    Resources are discovered from the integrations you use within your organization to create, operate and manage your services.

    Mapping the resources relevant to your service will provide a rich view of the service''s communication channels, dependencies and more.

    Types of resources which you can map to a service include:

    - `Code Repositories:` The software project(s) that make up the service

    - `Monitors and Dashboards:` Tools providing visibility into the health and performance of the service

    - `Communication Channels`: Virtual spaces where questions and concerns can be raised about the service

    - `Incident Management Resources`: Alerts setup within your incident management platform to notify individuals regarding issues with the service

    '
paths:
  /v1/catalog-services:
    post:
      x-speakeasy-entity-operation: CatalogService#create
      operationId: create-catalog-service
      summary: Create Service
      description: Creates a service.
      requestBody:
        $ref: '#/components/requestBodies/CreateCatalogServiceRequest'
      responses:
        '201':
          $ref: '#/components/responses/CatalogServiceResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      tags:
      - Catalog Services
    get:
      operationId: list-catalog-services
      summary: List Services
      description: Returns a paginated collection of services.
      parameters:
      - $ref: '#/components/parameters/PageSize'
      - $ref: '#/components/parameters/PageNumber'
      - $ref: '#/components/parameters/CatalogServiceFilter'
      - $ref: '#/components/parameters/CatalogServiceSort'
      responses:
        '200':
          $ref: '#/components/responses/ListCatalogServicesResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      tags:
      - Catalog Services
  /v1/catalog-services/{id}:
    parameters:
    - name: id
      in: path
      description: The `id` of the service.
      required: true
      schema:
        type: string
        example: 7f9fd312-a987-4628-b4c5-bb4f4fddd5f7
    get:
      x-speakeasy-entity-operation:
        terraform-resource: CatalogService#read
        terraform-datasource: null
      operationId: fetch-catalog-service
      summary: Get a Service
      description: Fetches a service.
      responses:
        '200':
          $ref: '#/components/responses/CatalogServiceResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      tags:
      - Catalog Services
    patch:
      x-speakeasy-entity-operation: CatalogService#update
      operationId: update-catalog-service
      summary: Update Service
      description: Updates a service.
      requestBody:
        $ref: '#/components/requestBodies/UpdateCatalogServiceRequest'
      responses:
        '200':
          $ref: '#/components/responses/CatalogServiceResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
      tags:
      - Catalog Services
    delete:
      x-speakeasy-entity-operation: CatalogService#delete
      operationId: delete-catalog-service
      summary: Delete Service
      description: Deletes a service.
      responses:
        '204':
          description: Service was deleted successfully.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      tags:
      - Catalog Services
components:
  schemas:
    InvalidParameterMinimumLength:
      type: object
      properties:
        field:
          type: string
          example: name
          readOnly: true
        rule:
          description: invalid parameters rules
          type: string
          enum:
          - min_length
          - min_digits
          - min_lowercase
          - min_uppercase
          - min_symbols
          - min_items
          - min
          nullable: false
          readOnly: true
          x-speakeasy-unknown-values: allow
        minimum:
          type: integer
          example: 8
        source:
          type: string
          example: body
        reason:
          type: string
          example: must have at least 8 characters
          readOnly: true
      additionalProperties: false
      required:
      - field
      - reason
      - rule
      - minimum
    UrlCustomField:
      type: object
      properties:
        name:
          description: The human-readable name of the URL link.
          type: string
          example: On-Call Dashboard
        link:
          description: The href value of the URL link.
          type: string
          format: uri-reference
          example: https://my-dashboard-svc.io/dashboards/1
      nullable: true
      required:
      - name
      - link
    UpdatedAt:
      description: An ISO-8601 timestamp representation of entity update date.
      type: string
      format: date-time
      example: '2022-11-04T20:10:06.927Z'
      readOnly: true
      x-speakeasy-param-suppress-computed-diff: true
    InvalidParameterChoiceItem:
      type: object
      properties:
        field:
          type: string
          example: name
          readOnly: true
        rule:
          description: invalid parameters rules
          type: string
          enum:
          - enum
          nullable: false
          readOnly: true
        reason:
          type: string
          example: is a required field
          readOnly: true
        choices:
          type: array
          items: {}
          minItems: 1
          nullable: false
          readOnly: true
          uniqueItems: true
        source:
          type: string
          example: body
      additionalProperties: false
      required:
      - field
      - reason
      - rule
      - choices
    ConflictError:
      allOf:
      - $ref: '#/components/schemas/BaseError'
      - type: object
        properties:
          status:
            example: 409
          title:
            example: Conflict
          type:
            example: https://httpstatuses.com/409
          instance:
            example: kong:trace:1234567890
          detail:
            example: Conflict
    InvalidParameterMaximumLength:
      type: object
      properties:
        field:
          type: string
          example: name
          readOnly: true
        rule:
          description: invalid parameters rules
          type: string
          enum:
          - max_length
          - max_items
          - max
          nullable: false
          readOnly: true
          x-speakeasy-unknown-values: allow
        maximum:
          type: integer
          example: 8
        source:
          type: string
          example: body
        reason:
          type: string
          example: must not have more than 8 characters
          readOnly: true
      additionalProperties: false
      required:
      - field
      - reason
      - rule
      - maximum
    UuidFieldFilter:
      description: 'Filter using **one** of the following operators: `eq`, `oeq`, `neq`'
      type: object
      properties:
        eq:
          description: The field exactly matches the provided value.
          type: string
        oeq:
          description: The field matches any of the provided values.
          type: string
        neq:
          description: The field does not match the provided value.
          type: string
      additionalProperties: false
    CatalogService:
      description: The service object contains information about a Service Catalog service.
      type: object
      properties:
        id:
          description: The service ID.
          type: string
          format: uuid
          example: 7f9fd312-a987-4628-b4c5-bb4f4fddd5f7
          readOnly: true
        name:
          description: 'The machine name of the Service that uniquely identifies it within the catalog.

            '
          type: string
          example: user-svc
          maxLength: 120
          minLength: 1
          pattern: ^[0-9a-z.-]+$
        display_name:
          description: The display name of the Service.
          type: string
          example: User Service
          maxLength: 120
          minLength: 1
        description:
          description: Optionally provide a description of the Service.
          type: string
          maxLength: 2048
          nullable: true
        custom_fields:
          $ref: '#/components/schemas/CustomFields'
        labels:
          $ref: '#/components/schemas/Labels'
        created_at:
          $ref: '#/components/schemas/CreatedAt'
        updated_at:
          $ref: '#/components/schemas/UpdatedAt'
      required:
      - id
      - name
      - display_name
      - description
      - custom_fields
      - labels
      - created_at
      - updated_at
      title: CatalogService
    Labels:
      description: "Labels store metadata of an entity that can be used for filtering an entity list or for searching across entity types. \n\nKeys must be of length 1-63 characters, and cannot start with \"kong\", \"konnect\", \"mesh\", \"kic\", or \"_\".\n"
      type: object
      example:
        env: test
      additionalProperties:
        type: string
        pattern: ^[a-z0-9A-Z]{1}([a-z0-9A-Z-._]*[a-z0-9A-Z]+)?$
        minLength: 1
        maxLength: 63
      maxProperties: 50
      title: Labels
    ForbiddenError:
      allOf:
      - $ref: '#/components/schemas/BaseError'
      - type: object
        properties:
          status:
            example: 403
          title:
            example: Forbidden
          type:
            example: https://httpstatuses.com/403
          instance:
            example: kong:trace:1234567890
          detail:
            example: Forbidden
    UnauthorizedError:
      allOf:
      - $ref: '#/components/schemas/BaseError'
      - type: object
        properties:
          status:
            example: 401
          title:
            example: Unauthorized
          type:
            example: https://httpstatuses.com/401
          instance:
            example: kong:trace:1234567890
          detail:
            example: Invalid credentials
    CreateCatalogService:
      type: object
      properties:
        name:
          description: 'The machine name of the Service that uniquely identifies it within the catalog.

            '
          type: string
          example: user-svc
          maxLength: 120
          minLength: 1
          pattern: ^[0-9a-z.-]+$
        display_name:
          description: The display name of the Service.
          type: string
          example: User Service
          maxLength: 120
          minLength: 1
        description:
          description: Optionally provide a description of the Service.
          type: string
          maxLength: 2048
          nullable: true
        labels:
          $ref: '#/components/schemas/Labels'
        custom_fields:
          $ref: '#/components/schemas/CustomFields'
      additionalProperties: false
      required:
      - name
      - display_name
    LabelsUpdate:
      description: "Labels store metadata of an entity that can be used for filtering an entity list or for searching across entity types. \n\nLabels are intended to store **INTERNAL** metadata.\n\nKeys must be of length 1-63 characters, and cannot start with \"kong\", \"konnect\", \"mesh\", \"kic\", or \"_\".\n"
      type: object
      example:
        env: test
      additionalProperties:
        type: string
        pattern: ^[a-z0-9A-Z]{1}([a-z0-9A-Z-._]*[a-z0-9A-Z]+)?$
        minLength: 1
        maxLength: 63
        nullable: true
      maxProperties: 50
      nullable: true
      writeOnly: true
    TextCustomField:
      type: string
      nullable: true
    StringFieldFilter:
      description: 'Filter using **one** of the following operators: `eq`, `oeq`, `neq`, `contains`, `ocontains`'
      type: object
      properties:
        eq:
          description: The field exactly matches the provided value.
          type: string
        contains:
          description: The field contains the provided value.
          type: string
        ocontains:
          description: The field contains any of the provided values.
          type: string
        oeq:
          description: The field matches any of the provided values.
          type: string
        neq:
          description: The field does not match the provided value.
          type: string
      additionalProperties: false
    NumericCustomField:
      type: number
      nullable: true
    CustomFields:
      description: 'Map of customizable, catalog-defined fields providing information about a service.

        '
      type: object
      example:
        owner: John Appleseed
        dashboard:
          name: On-Call Dashboard
          link: https://my-dashboard-svc.io/dashboards/1
      additionalProperties:
        oneOf:
        - $ref: '#/components/schemas/TextCustomField'
        - $ref: '#/components/schemas/NumericCustomField'
        - $ref: '#/components/schemas/BooleanCustomField'
        - $ref: '#/components/schemas/UrlCustomField'
      x-speakeasy-type-override: any
    PaginatedMeta:
      description: returns the pagination information
      type: object
      properties:
        page:
          $ref: '#/components/schemas/PageMeta'
      required:
      - page
      title: PaginatedMeta
      x-speakeasy-terraform-ignore: true
    BooleanFieldFilter:
      description: Filter by a boolean value (true/false).
      type: boolean
      title: BooleanFieldFilter
    CreatedAt:
      description: An ISO-8601 timestamp representation of entity creation date.
      type: string
      format: date-time
      example: '2022-11-04T20:10:06.927Z'
      readOnly: true
      x-speakeasy-param-suppress-computed-diff: true
    BaseError:
      description: standard error
      type: object
      properties:
        status:
          description: 'The HTTP status code of the error. Useful when passing the response

            body to child properties in a frontend UI. Must be returned as an integer.

            '
          type: integer
          readOnly: true
        title:
          description: 'A short, human-readable summary of the problem. It should not

            change between occurences of a problem, except for localization.

            Should be provided as "Sentence case" for direct use in the UI.

            '
          type: string
          readOnly: true
        type:
          description: The error type.
          type: string
          readOnly: true
        instance:
          description: 'Used to return the correlation ID back to the user, in the format

            kong:trace:<correlation_id>. This helps us find the relevant logs

            when a customer reports an issue.

            '
          type: string
          readOnly: true
        detail:
          description: 'A human readable explanation specific to this occurence of the problem.

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

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

            provided as "Sentence case" for direct use in the UI.

            '
          type: string
          readOnly: true
      required:
      - status
      - title
      - instance
      - detail
      title: Error
    InvalidParameterDependentItem:
      type: object
      properties:
        field:
          type: string
          example: name
          readOnly: true
        rule:
          description: invalid parameters rules
          type: string
          enum:
          - dependent_fields
          nullable: true
          readOnly: true
        reason:
          type: string
          example: is a required field
          readOnly: true
        dependents:
          type: array
          items: {}
          nullable: true
          readOnly: true
          uniqueItems: true
        source:
          type: string
          example: body
      additionalProperties: false
      required:
      - field
      - rule
      - reason
      - dependents
    SortQuery:
      description: 'The `asc` suffix is optional as the default sort order is ascending.

        The `desc` suffix is used to specify a descending order.

        Multiple sort attributes may be provided via a comma separated list.

        JSONPath notation may be used to specify a sub-attribute (eg: ''foo.bar desc'').

        '
      type: string
      example: created_at desc
      title: SortQuery
    InvalidRules:
      description: invalid parameters rules
      type: string
      enum:
      - required
      - is_array
      - is_base64
      - is_boolean
      - is_date_time
      - is_integer
      - is_null
      - is_number
      - is_object
      - is_string
      - is_uuid
      - is_fqdn
      - is_arn
      - unknown_property
      - missing_reference
      - is_label
      - matches_regex
      - invalid
      - is_supported_network_availability_zone_list
      - is_supported_network_cidr_block
      - is_supported_provider_region
      - type
      nullable: true
      readOnly: true
      x-speakeasy-unknown-values: allow
    InvalidParameters:
      description: invalid parameters
      type: array
      items:
        oneOf:
        - $ref: '#/components/schemas/InvalidParameterStandard'
        - $ref: '#/components/schemas/InvalidParameterMinimumLength'
        - $ref: '#/components/schemas/InvalidParameterMaximumLength'
        - $ref: '#/components/schemas/InvalidParameterChoiceItem'
        - $ref: '#/components/schemas/InvalidParameterDependentItem'
      minItems: 1
      nullable: false
      uniqueItems: true
    BadRequestError:
      allOf:
      - $ref: '#/components/schemas/BaseError'
      - type: object
        required:
        - invalid_parameters
        properties:
          invalid_parameters:
            $ref: '#/components/schemas/InvalidParameters'
    UpdateCatalogService:
      type: object
      properties:
        name:
          description: 'The machine name of the Service that uniquely identifies it within the catalog.

            '
          type: string
          example: user-svc
          maxLength: 120
          minLength: 1
          pattern: ^[0-9a-z.-]+$
        display_name:
          description: The display name of the Service.
          type: string
          example: User Service
          maxLength: 120
          minLength: 1
        description:
          description: Optionally provide a description of the Service.
          type: string
          maxLength: 2048
          nullable: true
        labels:
          $ref: '#/components/schemas/LabelsUpdate'
        custom_fields:
          $ref: '#/components/schemas/CustomFields'
      additionalProperties: false
    NumericFieldFilter:
      description: Filter by a numeric value.
      oneOf:
      - type: number
        description: Value strictly equals the given numeric value.
        example: 21
      - type: object
        title: NumericFieldEqualsFilter
        additionalProperties: false
        properties:
          eq:
            description: Value strictly equals the given numeric value.
            type: number
            example: 3.14
        required:
        - eq
      - type: object
        title: NumericFieldLTFilter
        additionalProperties: false
        properties:
          lt:
            description: Value is less than the given numeric value.
            type: number
            example: 10
        required:
        - lt
      - type: object
        title: NumericFieldLTEFilter
        additionalProperties: false
        properties:
          lte:
            description: Value is less than or equal to the given numeric value.
            type: number
            example: 10
        required:
        - lte
      - type: object
        title: NumericFieldGTFilter
        additionalProperties: false
        properties:
          gt:
            description: Value is greater than the given numeric value.
            type: number
            example: 1.85
        required:
        - gt
      - type: object
        title: NumericFieldGTEFilter
        additionalProperties: false
        properties:
          gte:
            description: Value is greater than or equal to the given numeric value.
            type: number
            example: 1.85
        required:
        - gte
    InvalidParameterStandard:
      type: object
      properties:
        field:
          type: string
          example: name
          readOnly: true
        rule:
          $ref: '#/components/schemas/InvalidRules'
        source:
          type: string
          example: body
        reason:
          type: string
          example: is a required field
          readOnly: true
      additionalProperties: false
      required:
      - field
      - reason
    CatalogServiceFilterParameters:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/UuidFieldFilter'
        name:
          $ref: '#/components/schemas/StringFieldFilter'
        display_name:
          $ref: '#/components/schemas/StringFieldFilter'
        custom_fields:
          description: "Filter by custom fields using dot-notation to specify the custom field.\nFilter operators are dictated by the custom field type. For example:\n\n\n  - `filter[custom_fields.owner]`\n  - `filter[custom_fields.owner][neq]=kong`\n  - `filter[custom_fields.dashboard.link][contains]=https`\n"
          oneOf:
          - $ref: '#/components/schemas/StringFieldFilter'
          - $ref: '#/components/schemas/BooleanFieldFilter'
          - $ref: '#/components/schemas/NumericFieldFilter'
        labels:
          $ref: '#/components/schemas/LabelsFieldFilter'
        created_at:
          $ref: '#/components/schemas/DateTimeFieldFilter'
        updated_at:
          $ref: '#/components/schemas/DateTimeFieldFilter'
    DateTimeFieldFilter:
      description: Filters on the given datetime (RFC-3339) field value.
      oneOf:
      - type: object
        title: DateTimeFieldEqualsFilter
        additionalProperties: false
        properties:
          eq:
            description: Value strictly equals given RFC-3339 formatted timestamp in UTC
            type: string
            format: date-time
            example: '2022-03-30T07:20:50Z'
        required:
        - eq
      - type: object
        title: DateTimeFieldLTFilter
        additionalProperties: false
        properties:
          lt:
            description: Value is less than the given RFC-3339 formatted timestamp in UTC
            type: string
            format: date-time
            example: '2022-03-30T07:20:50Z'
        required:
        - lt
      - type: object
        title: DateTimeFieldLTEFilter
        additionalProperties: false
        properties:
          lte:
            description: Value is less than or equal to the given RFC-3339 formatted timestamp in UTC
            type: string
            format: date-time
            example: '2022-03-30T07:20:50Z'
        required:
        - lte
      - type: object
        title: DateTimeFieldGTFilter
        additionalProperties: false
        properties:
          gt:
            description: Value is greater than the given RFC-3339 formatted timestamp in UTC
            type: string
            format: date-time
            example: '2022-03-30T07:20:50Z'
        required:
        - gt
      - type: object
        title: DateTimeFieldGTEFilter
        additionalProperties: false
        properties:
          gte:
            description: Value is greater than or equal to the given RFC-3339 formatted timestamp in UTC
            type: string
            format: date-time
            example: '2022-03-30T07:20:50Z'
        required:
        - gte
      title: DateTimeFieldFilter
    NotFoundError:
      allOf:
      - $ref: '#/components/schemas/BaseError'
      - type: object
        properties:
          status:
            example: 404
          title:
            example: Not Found
          type:
            example: https://httpstatuses.com/404
          instance:
            example: kong:trace:1234567890
          detail:
            example: Not found
    PageMeta:
      description: Contains pagination query parameters and the total number of objects returned.
      type: object
      properties:
        number:
          type: number
          example: 1
          x-speakeasy-terraform-ignore: true
        size:
          type: number
          example: 10
          x-speakeasy-terraform-ignore: true
        total:
          type: number
          example: 100
          x-speakeasy-terraform-ignore: true
      required:
      - number
      - size
      - total
    LabelsFieldFilter:
      allOf:
      - title: LabelsFieldFilter
        description: "Filters on the resource's `labels` field. Filters must use dot-notation to identify\nthe label key that will be used to filter the results. For example:\n\n\n  - `filter[labels.owner]`\n  - `filter[labels.owner][neq]=kong`\n  - `filter[labels.env]=dev`\n  - `filter[labels.env][ocontains]=dev,test`\n"
      - $ref: '#/components/schemas/StringFieldFilter'
    BooleanCustomField:
      type: boolean
      nullable: true
  parameters:
    CatalogServiceFilter:
      name: filter
      description: Filters a collection of services.
      required: false
      in: query
      style: deepObject
      schema:
        $ref: '#/components/schemas/CatalogServiceFilterParameters'
    CatalogServiceSort:
      name: sort
      description: "Sorts a collection of services. Supported sort attributes are:\n  - `display_name`\n  - `name`\n  - `created_at`\n  - `updated_at`\n\nDefault sort is `display_name` in ascending order.\n"
      required: false
      in: query
      schema:
        $ref: '#/components/schemas/SortQuery'
    PageSize:
      name: page[size]
      description: The maximum number of items to include per page. The last page of a collection may include fewer items.
      required: false
      in: query
      allowEmptyValue: true
      schema:
        type: integer
        example: 10
      x-speakeasy-terraform-ignore: true
    PageNumber:
      name: page[number]
      description: Determines which page of the entities to retrieve.
      required: false
      in: query
      allowEmptyValue: true
      schema:
        type: integer
        example: 1
      x-speakeasy-terraform-ignore: true
  responses:
    NotFound:
      description: Not Found
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/NotFoundError'
    BadRequest:
      description: Bad Request
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/BadRequestError'
    Conflict:
      description: Conflict
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ConflictError'
    Unauthorized:
      description: Unauthorized
      content:
        application/problem+json:
          schema:
            description: The error response object.
            type: object
            properties:
              status:
                description: The HTTP status code.
                type: integer
                example: 403
              title:
                description: The Error Response.
                type: string
                example: Unauthorized
              instance:
                description: The Konnect traceback code.
                type: string
                example: konnect:trace:952172606039454040
              detail:
                description: Details about the error response.
                type: string
                example: You do not have permission to perform this action
            $ref: '#/components/schemas/UnauthorizedError'
            title: Unauthorized Response
    ListCatalogServicesResponse:
      description: A paginated list response for a collection of services.
      content:
        application/json:
          schema:
            type: object
            properties:
              meta:
                $ref: '#/components/schemas/PaginatedMeta'
              data:
                type: array
                items:
                  $ref: '#/components/schemas/CatalogService'
            additionalProperties: false
            required:
            - meta
            - data
    CatalogServiceResponse:
      description: A response containing a single service object.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CatalogService'
    Forbidden:
      description: Forbidden
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ForbiddenError'
  requestBodies:
    CreateCatalogServiceRequest:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CreateCatalogService'
    UpdateCatalogServiceRequest:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UpdateCatalogService'
  securitySchemes:
    adminToken:
      in: header
      name: Kong-Admin-Token
      type: apiKey
externalDocs:
  description: Documentation for Kong Gateway and its APIs
  url: https://developer.konghq.com