Deutsche Telekom ApiExposure API

With an ApiExposure you can define and API you want to expose on TARDIS, to provide it to other consumers. It is only possible to expose the entire API. It is not possible to expose a single resource. Therefore, every exposure needs the API Base Path which you can find in the Open API Specification File of your API and the upstream URL.

OpenAPI Specification

deutsche-telekom-apiexposure-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Controlplane Api ApiChangelog ApiExposure API
  description: API of the TARDIS control plane. With this API configuration connectivity between different Tardis instances in ensured
  contact:
    name: TARDIS
    url: https://developer.telekom.de/docs/src/tardis_customer_handbook/support/
    email: FMB_TARDIS_Support@telekom.de
  version: 1.0.0
  x-api-category: TARDIS
  x-vendor: false
servers:
- url: https://api.telekom.de/controlplane/v1
tags:
- name: ApiExposure
  description: 'With an ApiExposure you can define and API you want to expose on TARDIS,

    to provide it to other consumers. It is only possible to expose the entire

    API. It is not possible to expose a single resource. Therefore, every

    exposure needs the API Base Path which you can find in the Open API

    Specification File of your API and the upstream URL.

    '
paths:
  /applications/{applicationId}/apiexposures:
    get:
      tags:
      - ApiExposure
      summary: Find all ApiExposures
      description: Find all ApiExposures of this application
      operationId: getAllApiExposures
      parameters:
      - $ref: common.yaml#/components/parameters/ApplicationId
      - $ref: common.yaml#/components/parameters/Limit
      - $ref: common.yaml#/components/parameters/Offset
      - $ref: common.yaml#/components/parameters/Sort
      responses:
        '200':
          description: OK
          headers:
            X-Total-Count:
              $ref: common.yaml#/components/headers/XTotalCount
            X-Result-Count:
              $ref: common.yaml#/components/headers/XResultCount
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiExposureListResponse'
        '400':
          $ref: common.yaml#/components/responses/BadRequest
        '401':
          $ref: common.yaml#/components/responses/Unauthorized
        '403':
          $ref: common.yaml#/components/responses/Forbidden
        '415':
          $ref: common.yaml#/components/responses/UnsupportedMediaType
        '500':
          $ref: common.yaml#/components/responses/ServerError
      security:
      - OAuth2:
        - tardis:admin:all
        - tardis:admin:read
        - tardis:admin:obfuscated
        - tardis:supervisor:read
        - tardis:hub:all
        - tardis:hub:read
        - tardis:hub:obfuscated
        - tardis:team:all
        - tardis:team:read
        - tardis:team:obfuscated
        - tardis:user:all
        - tardis:user:read
        - tardis:user:obfuscated
    post:
      deprecated: true
      tags:
      - ApiExposure
      summary: Create an ApiExposures
      description: 'Creating and updating resources is asynchronous, which is why the status

        is given as an answer to a POST/PUT request, since it is possible that

        the resource to be created has not yet been processed at the time the

        response is created. If the status after creation is in state

        "Processing", the resource must be queried with GET to see whether it

        was created successfully or whether errors/warnings are written in the

        status. If the creation/update is incorrect, the processing status will

        be set to blocked. Otherwise to "failed". Status 201 means, that we

        accepted the request and there are no syntactic or semantic errors, but

        there can occur failures in the after processing. That will be shown in

        the status if you request the appropriate resource.

        '
      operationId: createApiExposure
      parameters:
      - $ref: common.yaml#/components/parameters/ApplicationId
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApiExposureCreateRequest'
      responses:
        '202':
          description: ACCEPTED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiExposureResponse'
        '400':
          $ref: common.yaml#/components/responses/BadRequest
        '401':
          $ref: common.yaml#/components/responses/Unauthorized
        '403':
          $ref: common.yaml#/components/responses/Forbidden
        '415':
          $ref: common.yaml#/components/responses/UnsupportedMediaType
        '500':
          $ref: common.yaml#/components/responses/ServerError
      security:
      - OAuth2:
        - tardis:admin:all
        - tardis:hub:all
        - tardis:team:all
        - tardis:user:all
  /applications/{applicationId}/apiexposures/{apiExposureName}:
    get:
      tags:
      - ApiExposure
      summary: Find an existing ApiExposure
      description: Find an existing ApiExposure
      operationId: getApiExposure
      parameters:
      - $ref: common.yaml#/components/parameters/ApplicationId
      - name: apiExposureName
        description: The name of the ApiExposure
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiExposureResponse'
        '400':
          $ref: common.yaml#/components/responses/BadRequest
        '401':
          $ref: common.yaml#/components/responses/Unauthorized
        '403':
          $ref: common.yaml#/components/responses/Forbidden
        '404':
          $ref: common.yaml#/components/responses/NotFound
        '415':
          $ref: common.yaml#/components/responses/UnsupportedMediaType
        '500':
          $ref: common.yaml#/components/responses/ServerError
      security:
      - OAuth2:
        - tardis:admin:all
        - tardis:admin:read
        - tardis:admin:obfuscated
        - tardis:supervisor:read
        - tardis:hub:all
        - tardis:hub:read
        - tardis:hub:obfuscated
        - tardis:team:all
        - tardis:team:read
        - tardis:team:obfuscated
        - tardis:user:all
        - tardis:user:read
        - tardis:user:obfuscated
    put:
      deprecated: true
      tags:
      - ApiExposure
      summary: Update an existing ApiExposure
      description: 'Creating and updating resources is asynchronous, which is why the status

        is given as an answer to a POST/PUT request, since it is possible that

        the resource to be created has not yet been processed at the time the

        response is created. If the status after creation is in state

        "Processing", the resource must be queried with GET to see whether it

        was created successfully or whether errors/warnings are written in the

        status. If the creation/update is incorrect, the processing status will

        be set to blocked. Otherwise to "failed". Status 201 means, that we

        accepted the request and there are no syntactic or semantic errors, but

        there can occur failures in the after processing. That will be shown in

        the status if you request the appropriate resource.

        '
      operationId: updateApiExposure
      parameters:
      - $ref: common.yaml#/components/parameters/ApplicationId
      - name: apiExposureName
        in: path
        description: The name of the ApiExposure
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApiExposureUpdateRequest'
      responses:
        '202':
          description: ACCEPTED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiExposureResponse'
        '400':
          $ref: common.yaml#/components/responses/BadRequest
        '401':
          $ref: common.yaml#/components/responses/Unauthorized
        '403':
          $ref: common.yaml#/components/responses/Forbidden
        '404':
          $ref: common.yaml#/components/responses/NotFound
        '415':
          $ref: common.yaml#/components/responses/UnsupportedMediaType
        '500':
          $ref: common.yaml#/components/responses/ServerError
      security:
      - OAuth2:
        - tardis:admin:all
        - tardis:hub:all
        - tardis:team:all
        - tardis:user:all
    delete:
      deprecated: true
      tags:
      - ApiExposure
      summary: Delete an ApiExposure
      description: Delete an ApiExposure
      operationId: deleteApiExposure
      parameters:
      - $ref: common.yaml#/components/parameters/ApplicationId
      - name: apiExposureName
        in: path
        description: The name of the ApiExposure
        required: true
        schema:
          type: string
      responses:
        '204':
          description: DELETED
        '400':
          $ref: common.yaml#/components/responses/BadRequest
        '401':
          $ref: common.yaml#/components/responses/Unauthorized
        '403':
          $ref: common.yaml#/components/responses/Forbidden
        '404':
          $ref: common.yaml#/components/responses/NotFound
        '415':
          $ref: common.yaml#/components/responses/UnsupportedMediaType
        '500':
          $ref: common.yaml#/components/responses/ServerError
      security:
      - OAuth2:
        - tardis:admin:all
        - tardis:hub:all
        - tardis:team:all
        - tardis:user:all
  /applications/{applicationId}/apiexposures/{apiExposureName}/status:
    get:
      tags:
      - ApiExposure
      summary: Find an existing ApiExposure and return its status
      description: Find an existing ApiExposure and return its status
      operationId: getApiExposureStatus
      parameters:
      - $ref: common.yaml#/components/parameters/ApplicationId
      - name: apiExposureName
        description: The name of the ApiExposure
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: common.yaml#/components/schemas/ResourceStatusResponse
        '400':
          $ref: common.yaml#/components/responses/BadRequest
        '401':
          $ref: common.yaml#/components/responses/Unauthorized
        '403':
          $ref: common.yaml#/components/responses/Forbidden
        '404':
          $ref: common.yaml#/components/responses/NotFound
        '415':
          $ref: common.yaml#/components/responses/UnsupportedMediaType
        '500':
          $ref: common.yaml#/components/responses/ServerError
      security:
      - OAuth2:
        - tardis:admin:all
        - tardis:admin:read
        - tardis:admin:obfuscated
        - tardis:supervisor:read
        - tardis:hub:all
        - tardis:hub:read
        - tardis:hub:obfuscated
        - tardis:team:all
        - tardis:team:read
        - tardis:team:obfuscated
        - tardis:user:all
        - tardis:user:read
        - tardis:user:obfuscated
  /applications/{applicationId}/apiexposures/{apiExposureName}/apisubscriptions:
    get:
      tags:
      - ApiExposure
      summary: Find all ApiSubscriptions of this ApiExposure
      description: Find all ApiSubscriptions of this ApiExposure
      operationId: getAllExposureApiSubscriptions
      parameters:
      - $ref: common.yaml#/components/parameters/ApplicationId
      - name: apiExposureName
        description: The name of the ApiExposure
        in: path
        required: true
        schema:
          type: string
      - $ref: common.yaml#/components/parameters/Limit
      - $ref: common.yaml#/components/parameters/Offset
      - $ref: common.yaml#/components/parameters/Sort
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiSubscriptionListResponse'
        '400':
          $ref: common.yaml#/components/responses/BadRequest
        '401':
          $ref: common.yaml#/components/responses/Unauthorized
        '403':
          $ref: common.yaml#/components/responses/Forbidden
        '415':
          $ref: common.yaml#/components/responses/UnsupportedMediaType
        '500':
          $ref: common.yaml#/components/responses/ServerError
      security:
      - OAuth2:
        - tardis:admin:all
        - tardis:admin:read
        - tardis:admin:obfuscated
        - tardis:supervisor:read
        - tardis:hub:all
        - tardis:hub:read
        - tardis:hub:obfuscated
        - tardis:team:all
        - tardis:team:read
        - tardis:team:obfuscated
        - tardis:user:all
        - tardis:user:read
        - tardis:user:obfuscated
components:
  schemas:
    ApiExposure:
      type: object
      properties:
        basePath:
          type: string
          pattern: ^\/[a-zA-Z0-9\/-]*$
        upstream:
          type: string
          format: uri
        variant:
          type: string
          description: 'Defines the type of API exposure and determines which gateway

            the route should be provisioned on.

            Supported values:

            - null or ''DEFAULT'': Regular API exposure on Stargate gateway (backward compatible)

            - ''MCP'': MCP exposure provisioned on aiGateway

            - ''TELECONTEXTMCP'': MCP exposure on aiGateway with automatic Telecontext integration

            '
          enum:
          - DEFAULT
          - MCP
          - TELECONTEXTMCP
          example: DEFAULT
        approval:
          $ref: '#/components/schemas/ApprovalStrategy'
        rateLimit:
          $ref: '#/components/schemas/RateLimit'
        visibility:
          $ref: '#/components/schemas/Visibility'
        security:
          $ref: '#/components/schemas/SubscriberSecurity'
        failover:
          $ref: '#/components/schemas/ExposureFailover'
        loadBalancing:
          $ref: '#/components/schemas/LoadBalancing'
        trustedTeams:
          type: array
          items:
            $ref: common.yaml#/components/schemas/TeamRef
        removeHeaders:
          type: array
          items:
            type: string
    ExposureFailover:
      type: object
      properties:
        zone:
          type: string
          example: aws
    SubscriptionFailover:
      type: array
      readOnly: true
      items:
        type: object
        properties:
          zone:
            type: string
            readOnly: true
            example: aws
          gatewayUrl:
            type: string
            readOnly: true
            example: https://stargate-playground.live.dhei.telekom.de/eni/echo/v1
    ApprovalStrategy:
      enum:
      - AUTO
      - SIMPLE
      - FOUREYES
      type: string
    SubscriberSecurity:
      discriminator:
        propertyName: type
        mapping:
          oauth2: '#/components/schemas/OAuth2'
          basicAuth: '#/components/schemas/BasicAuth'
      oneOf:
      - $ref: '#/components/schemas/OAuth2'
      - $ref: '#/components/schemas/BasicAuth'
    Visibility:
      enum:
      - ENTERPRISE
      - WORLD
      - ZONE
      type: string
    ApiExposureResponse:
      type: object
      readOnly: true
      required:
      - name
      - zone
      - basePath
      - upstream
      - visibility
      allOf:
      - $ref: '#/components/schemas/ApiExposure'
      - properties:
          name:
            type: string
            readOnly: true
            example: eni-heartbeat-v1
          zone:
            type: string
            readOnly: true
          status:
            $ref: common.yaml#/components/schemas/Status
    ApiSubscriptionListResponse:
      properties:
        paging:
          $ref: common.yaml#/components/schemas/Paging
        _links:
          $ref: common.yaml#/components/schemas/Links
        items:
          type: array
          items:
            $ref: '#/components/schemas/ApiSubscriptionResponse'
    OAuth2:
      type: object
      required:
      - type
      properties:
        type:
          type: string
          enum:
          - oauth2
        tokenEndpoint:
          type: string
        clientId:
          type: string
        clientSecret:
          type: string
        scopes:
          type: array
          items:
            type: string
        username:
          type: string
        password:
          type: string
        refreshToken:
          type: string
        grantType:
          type: string
        tokenRequest:
          type: string
          enum:
          - body
          - header
          description: Specifies if the authentication data should be sent to the external IDP via headers or in the body of the request
    Server:
      type: object
      readOnly: true
      properties:
        upstream:
          type: string
          readOnly: true
        weight:
          type: integer
          readOnly: true
    ApiExposureUpdateRequest:
      type: object
      required:
      - upstream
      - basePath
      - approval
      - visibility
      allOf:
      - $ref: '#/components/schemas/ApiExposure'
    ApiSubscription:
      type: object
      properties:
        basePath:
          description: Must match pattern ^\/[a-zA-Z0-9\/-]*$
          type: string
          example: /my-hub/my-app/v1
          pattern: ^\/[a-zA-Z0-9\/-]*$
        security:
          $ref: '#/components/schemas/SubscriberSecurity'
    ApiSubscriptionResponse:
      type: object
      readOnly: true
      allOf:
      - $ref: '#/components/schemas/ApiSubscription'
      - properties:
          name:
            type: string
            readOnly: true
            example: eni-echo-v1
          zone:
            type: string
            readOnly: true
          gatewayUrl:
            type: string
            readOnly: true
            example: https://stargate-playground.live.dhei.telekom.de/eni/echo/v1
          status:
            $ref: common.yaml#/components/schemas/Status
          application:
            $ref: common.yaml#/components/schemas/ApplicationRef
          team:
            $ref: common.yaml#/components/schemas/TeamRef
          approval:
            $ref: '#/components/schemas/Approval'
          failover:
            $ref: '#/components/schemas/SubscriptionFailover'
    RateLimit:
      type: object
      properties:
        second:
          format: int32
          type: integer
        minute:
          format: int32
          type: integer
        hour:
          format: int32
          type: integer
        faultTolerant:
          type: boolean
        hideClientHeaders:
          type: boolean
    BasicAuth:
      type: object
      required:
      - type
      - username
      - password
      properties:
        type:
          type: string
          enum:
          - basicAuth
        username:
          type: string
        password:
          type: string
    ApiExposureCreateRequest:
      type: object
      required:
      - basePath
      - upstream
      - visibility
      allOf:
      - $ref: '#/components/schemas/ApiExposure'
    LoadBalancing:
      type: object
      readOnly: true
      properties:
        servers:
          type: array
          readOnly: true
          items:
            $ref: '#/components/schemas/Server'
    Approval:
      type: object
      readOnly: true
      required:
      - status
      - comment
      properties:
        status:
          type: string
          example: granted
        comment:
          type: string
          example: trusted team
        decider:
          type: string
          example: hyperion@telekom.de
        timestamp:
          type: string
          format: date-time
          example: '2022-09-28T16:05:46.384Z'
    ApiExposureListResponse:
      properties:
        paging:
          $ref: common.yaml#/components/schemas/Paging
        _links:
          $ref: common.yaml#/components/schemas/Links
        items:
          type: array
          items:
            $ref: '#/components/schemas/ApiExposureResponse'