All Downloads are FREE. Search and download functionalities are using the official Maven repository.

est.api.portal.gravitee-rest-api-portal-rest.3.6.3.source-code.openapi.yaml Maven / Gradle / Ivy

There is a newer version: 3.10.0
Show newest version
openapi: 3.0.0
info:
  title: Gravitee.io Portal Rest API
  description: API dedicated to the devportal part of Gravitee
  termsOfService: terms
  contact:
    name: The Gravitee Team
    url: https://gravitee.io
    email: [email protected]
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0
  version: "3.0.0"
servers:
  - url: http://localhost:8083/portal/environments/{envId}
    description: The portal API for a given environment
    variables:
      envId:
        default: DEFAULT
        description: ID of the environment
tags:
  - name: Analytics
    description: All about application analytics
  - name: Api
    description: All about APIs
  - name: Application
    description: All about applications
  - name: Group
    description: All about groups
  - name: Portal
    description: All about portal configurations
  - name: Subscription
    description: All about subscriptions
  - name: User
    description: All about the current user
  - name: Users
    description: All about the portal users

security:
  - BasicAuth: []
  - CookieAuth: []

paths:
  /apis:
    get:
      tags:
        - Api
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
        - $ref: '#/components/parameters/apiContextPathQueryParam'
        - $ref: '#/components/parameters/apiLabelQueryParam'
        - $ref: '#/components/parameters/apiVersionQueryParam'
        - $ref: '#/components/parameters/apiNameQueryParam'
        - $ref: '#/components/parameters/apiCategoryQueryParam'
        - $ref: '#/components/parameters/apiFilterQueryParam'
        - $ref: '#/components/parameters/apiFilterExcludedQueryParam'
        - $ref: '#/components/parameters/apiPromotedQueryParam'
      summary: List APIs
      description: |
        List public APIs for anonymous requests.
        List all the APIs the current user is allowed to category for authenticated requests.

        The list can be filtered according to query parameters.

        By default the list is sorted by alphabetic order.
        If a **cat** query param is sent, a specific sorting can be applied. Please refer to **cat** description for detail.
      operationId: getApis
      security: []
      responses:
        200:
          description: List accessible APIs for current user
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApisResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /apis/_search:
    post:
      tags:
        - Api
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
        - $ref: '#/components/parameters/apiQueryParam'
      summary: Search APIs with a query
      description: |
        Same as `/apis` but with a search query as a parameter. Search for API using the search engine.
        Supports pagination.
      operationId: searchApis
      security: []
      responses:
        200:
          description: Search accessible APIs for current user
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApisResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /apis/{apiId}:
    parameters:
      - $ref: '#/components/parameters/apiIdParam'
    get:
      tags:
        - Api
      parameters:
        - $ref: '#/components/parameters/apiIncludeParam'
      summary: Get the API definition
      description:  |
        Get the detail of an API.

        This API has to be accessible by the current user, otherwise a 404 will be returned.
      operationId: getApiByApiId
      security: []
      responses:
        200:
          description: API definition
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Api'
        404:
          $ref: '#/components/responses/APINotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /apis/{apiId}/informations:
    parameters:
      - $ref: '#/components/parameters/apiIdParam'
    get:
      tags:
        - Portal
      summary: Get the api dynamic informations to display.
      operationId: getApiInformations
      description: |
        Get api informations.
      security: []
      responses:
        200:
          description: List of api informations
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ApiInformation'
        500:
          $ref: '#/components/responses/InternalServerError'
  /apis/{apiId}/links:
    parameters:
      - $ref: '#/components/parameters/apiIdParam'
    get:
      tags:
        - Api
      summary: Get the API links from Aside SYSTEM_FOLDER.
      operationId: getApiLinks
      description: |
        Get all the links (internal and external) to be displayed in the detail of the API.
      security: []
      responses:
        200:
          description: List of Links
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LinksResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /apis/{apiId}/metrics:
    parameters:
      - $ref: '#/components/parameters/apiIdParam'
    get:
      tags:
        - Api
      summary: Get API metrics
      description:  |
        Get some metrics about an API :
          * number of subscribers
          * number of hits during the last 7 days
          * health ratio over the last week

        This API has to be accessible by the current user, otherwise a 404 will be returned.
      operationId: getApiMetricsByApiId
      security: []
      responses:
        200:
          description: API metrics
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiMetrics'
        404:
          $ref: '#/components/responses/APINotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /apis/{apiId}/pages:
    parameters:
      - $ref: '#/components/parameters/apiIdParam'
    get:
      tags:
        - Api
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
        - $ref: '#/components/parameters/homePageQueryParam'
        - $ref: '#/components/parameters/parentPageQueryParam'
      summary: List API pages
      description: |
        List all documentation pages of an API.

        This API has to be accessible by the current user, otherwise a 404 will be returned.
      operationId: getPagesByApiId
      security: []
      responses:
        200:
          $ref: '#/components/responses/PagesSuccess'
        404:
          $ref: '#/components/responses/APINotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /apis/{apiId}/pages/{pageId}:
    parameters:
      - $ref: '#/components/parameters/apiIdParam'
      - $ref: '#/components/parameters/pageIdParam'
    get:
      tags:
        - Api
      parameters:
        - $ref: '#/components/parameters/pageIncludeParam'
      summary: Get an API page
      description: |
        Get an API page.

        This API has to be accessible by the current user, otherwise a 404 will be returned.
      operationId: getPageByApiIdAndPageId
      security: []
      responses:
        200:
          $ref: '#/components/responses/PageSuccess'
        404:
          description: API or Page not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /apis/{apiId}/pages/{pageId}/content:
    parameters:
      - $ref: '#/components/parameters/apiIdParam'
      - $ref: '#/components/parameters/pageIdParam'
    get:
      tags:
        - Api
      summary: Get the content of an API page.
      description: |
        Get the content of a specific API documentation page.

        This API has to be accessible by the current user, otherwise a 404 will be returned.
      operationId: getPageContentByApiIdAndPageId
      security: []
      responses:
        200:
          description: The content of the api documentation page.
          content:
            text/plain:
              schema:
                type: string
        404:
          description: API or Page not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /apis/{apiId}/picture:
    parameters:
      - $ref: '#/components/parameters/apiIdParam'
    get:
      tags:
        - Api
      summary: Get the API's picture
      description: |
        Get the API's picture.

        This API has to be accessible by the current user, otherwise a 404 will be returned.
      operationId: getPictureByApiId
      security: []
      responses:
        200:
          $ref: '#/components/responses/PictureSuccess'
        404:
          $ref: '#/components/responses/APINotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /apis/{apiId}/background:
    parameters:
      - $ref: '#/components/parameters/apiIdParam'
    get:
      tags:
        - Api
      summary: Get the API's background
      description: |
        Get the API's background.

        This API has to be accessible by the current user, otherwise a 404 will be returned.
      operationId: getBackgroundByApiId
      security: []
      responses:
        200:
          $ref: '#/components/responses/PictureSuccess'
        404:
          $ref: '#/components/responses/APINotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /apis/{apiId}/plans:
    parameters:
      - $ref: '#/components/parameters/apiIdParam'
    get:
      tags:
        - Api
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'

      summary: List plans for an API
      description: |
        List plans for an API.

        This API has to be accessible by the current user, otherwise a 404 will be returned.
      operationId: getApiPlansByApiId
      security: []
      responses:
        200:
          description: List accessible plans for current user
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlansResponse'
        404:
          $ref: '#/components/responses/APINotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /apis/{apiId}/ratings:
    parameters:
      - $ref: '#/components/parameters/apiIdParam'
    get:
      tags:
        - Api
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
        - $ref: '#/components/parameters/mineQueryParam'
        - $ref: '#/components/parameters/ratingOrderQueryParam'
      summary: List ratings for an API
      description: |
        List ratings for an API.

        This API has to be accessible by the current user, otherwise a 404 will be returned.
      operationId: getApiRatingsByApiId
      security: []
      responses:
        200:
          description: List of ratings
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RatingsResponse'
        404:
          $ref: '#/components/responses/APINotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
    post:
      tags:
        - Api
      summary: Create a rating for an API
      description: |
        Create a rating for an API.

        This API has to be accessible by the current user, otherwise a 404 will be returned.

        The current must have API_RATING[CREATE] permission to create a rating.
      operationId: createApiRating
      requestBody:
        description: Use to add a rating to an api
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RatingInput'
      responses:
        201:
          description: Created Rating
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rating'
        400:
          description: Rating for this api and this user already exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        403:
          description: Rating service is not activated or user does not have sufficient rights to access this resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        404:
          $ref: '#/components/responses/APINotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /apis/{apiId}/ratings/{ratingId}:
    parameters:
      - $ref: '#/components/parameters/apiIdParam'
      - $ref: '#/components/parameters/ratingIdParam'
    put:
      tags:
        - Api
      summary: Update a rating for an API
      description: |
        Update a rating for an API.

        This API has to be accessible by the current user, otherwise a 404 will be returned.

        The current must have API_RATING[CREATE] permission to update a rating.
      operationId: updateApiRating
      requestBody:
        description: Use to update a rating to an api
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RatingInput'
      responses:
        200:
          description: Updated Rating
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rating'
        403:
          description: Rating service is not activated or user does not have sufficient rights to access this resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        404:
          description: API or Rating not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
    delete:
      tags:
        - Api
      summary: Delete a rating for an API
      description: |
        Delete a rating for an API.

        This API has to be accessible by the current user, otherwise a 404 will be returned.

        The current must have API_RATING[DELETE] permission to delete a rating.
      operationId: deleteApiRating
      responses:
        204:
          description: Deleted Rating
        403:
          description: Rating service is not activated or user does not have sufficient rights to access this resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        404:
          description: API or Rating not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /apis/{apiId}/ratings/{ratingId}/answers:
    parameters:
      - $ref: '#/components/parameters/apiIdParam'
      - $ref: '#/components/parameters/ratingIdParam'
    post:
      tags:
        - Api
      summary: Create an answer to rating
      description: |
        Create an answer to rating of API.

        This API has to be accessible by the current user, otherwise a 404 will be returned.

        The current must have API_RATING_ANSWER[CREATE] permission to create an answer.
      operationId: createApiRatingAnswer
      requestBody:
        description: Use to create an answer
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RatingAnswerInput'
      responses:
        200:
          description: Updated Rating with answer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rating'
        403:
          description: Rating service is not activated or user does not have sufficient rights to access this resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        404:
          description: API or Rating not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /apis/{apiId}/ratings/{ratingId}/answers/{answerId}:
    parameters:
      - $ref: '#/components/parameters/apiIdParam'
      - $ref: '#/components/parameters/ratingIdParam'
      - $ref: '#/components/parameters/answerIdParam'
    delete:
      tags:
        - Api
      summary: Delete an answer rating for an API
      description: |
        Delete an answer rating for an API.

        This API has to be accessible by the current user, otherwise a 404 will be returned.

        The current must have API_RATING_ANSWER[DELETE] permission to delete a rating.
      operationId: deleteApiRatingAnswer
      responses:
        204:
          description: Deleted Rating Answer
        403:
          description: Rating service is not activated or user does not have sufficient rights to access this resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        404:
          description: API, Rating or Answer not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /apis/{apiId}/subscribers:
    parameters:
      - $ref: '#/components/parameters/apiIdParam'
    get:
      tags:
        - Api
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
        - $ref: '#/components/parameters/subscriptionStatusesQueryParam'

      summary: List applications that subscribred to an API
      description: |
        If the current user is the owner of the API, all connected applications will be returned. Filtered by status. Ordered by number of hits.
        Else only applications that current is allowed to access will.

        This API has to be accessible by the current user, otherwise a 404 will be returned.
      operationId: getSubscriberApplicationsByApiId
      security: []
      responses:
        200:
          description: List accessible applications for current user
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationsResponse'
        404:
          $ref: '#/components/responses/APINotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /apis/{apiId}/media/{mediaHash}:
    parameters:
      - $ref: '#/components/parameters/apiIdParam'
      - $ref: '#/components/parameters/mediaHashParam'
    get:
      tags:
        - Api
      summary: Get the api media.
      operationId: getApiMedia
      description: |
        Get api media.
      security: []
      responses:
        200:
          $ref: '#/components/responses/MediaSuccess'
        404:
          $ref: '#/components/responses/APINotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'

  /applications:
    get:
      tags:
        - Application
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
        - $ref: '#/components/parameters/forSubscriptionParam'
        - $ref: '#/components/parameters/applicationOrderQueryParam'
      summary: List all the applications accessible to authenticated user. Default order is by *name* ASC.
      description: |
        List all the applications accessible to authenticated user.

        User must have MANAGEMENT_APPLICATION[READ] and PORTAL_APPLICATION[READ] permission.
      operationId: getApplications
      responses:
        200:
          description: List of Applications.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationsResponse'
        403:
          $ref: '#/components/responses/PermissionError'
        500:
          $ref: '#/components/responses/InternalServerError'
    post:
      tags:
        - Application
      requestBody:
        description: Use to create an application.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplicationInput'
      summary: Create an application
      description: |
        Create an application.

        User must have MANAGEMENT_APPLICATION[CREATE] permission.
      operationId: createApplication
      responses:
        201:
          description: Created application.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
        400:
          description: Bad Request if body is empty.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        403:
          $ref: '#/components/responses/PermissionError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /applications/{applicationId}:
    parameters:
      - $ref: '#/components/parameters/applicationIdParam'
    get:
      tags:
        - Application
      summary: Get an application.
      description: |
        Get an application.

        User must have the APPLICATION_DEFINITION[READ] permission.
      operationId: getApplicationByApplicationId
      responses:
        200:
          description: One application.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          $ref: '#/components/responses/ApplicationNotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
    put:
      tags:
        - Application
      requestBody:
        description: Use to update an application.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Application'
      summary: Update an application.
      description: |
        Update an application.

        User must have APPLICATION_DEFINITION[UPDATE] permission.
      operationId: updateApplicationByApplicationId
      responses:
        200:
          description: Updated application.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
        400:
          description: Bad Request if body is empty.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          $ref: '#/components/responses/ApplicationNotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
    delete:
      tags:
        - Application
      summary: Delete an application
      description: |
        Delete an application.

        User must have the APPLICATION_DEFINITION[DELETE] permission.
      operationId: deleteApplicationByApplicationId
      responses:
        204:
          description: No-Content
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          $ref: '#/components/responses/ApplicationNotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /applications/{applicationId}/picture:
    parameters:
      - $ref: '#/components/parameters/applicationIdParam'
    get:
      tags:
        - Application
      summary: Get the application's picture
      description: |
        Get the application's picture.

        User must have APPLICATION_DEFINITION[READ] permission.
      operationId: getApplicationPictureByApplicationId
      responses:
        200:
          $ref: '#/components/responses/PictureSuccess'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          $ref: '#/components/responses/ApplicationNotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /applications/{applicationId}/background:
    parameters:
      - $ref: '#/components/parameters/applicationIdParam'
    get:
      tags:
        - Application
      summary: Get the application's background
      description: |
        Get the application's background.

        User must have APPLICATION_DEFINITION[READ] permission.
      operationId: getApplicationBackgroundByApplicationId
      responses:
        200:
          $ref: '#/components/responses/PictureSuccess'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          $ref: '#/components/responses/ApplicationNotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /applications/{applicationId}/notifications:
    parameters:
      - $ref: '#/components/parameters/applicationIdParam'
    get:
      tags:
        - Application
      summary: Get application notifications
      description: |
        Get application notifications.

        User must have APPLICATION_NOTIFICATION[READ] permission to get notifications.
      operationId: getNotificationsByApplicationId
      responses:
        200:
          description: List of notifications configured
          content:
            application/json:
              schema:
                description: List of notifications configured on the application.
                type: array
                items:
                  type: string
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          $ref: '#/components/responses/ApplicationNotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
    put:
      tags:
        - Application
      requestBody:
        description: Use to update application notifications.
        content:
          application/json:
            schema:
              description: List of notifications configured on the application.
              $ref: '#/components/schemas/NotificationInput'
      summary: Update notifications for an application.
      description: |
        Update notifications for an application.

        User must have APPLICATION_NOTIFICATION[UPDATE] permission to update notifications.
      operationId: updateApplicationNotifications
      responses:
        200:
          description: Updated application notifications.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          $ref: '#/components/responses/ApplicationNotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /applications/{applicationId}/members:
    parameters:
      - $ref: '#/components/parameters/applicationIdParam'
    get:
      tags:
        - Application
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
      summary: List application members
      description: |
        List application members.

        User must have the APPLICATION_MEMBER[READ] permission.
      operationId: getMembersByApplicationId
      responses:
        200:
          description: List of members
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MembersResponse'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          $ref: '#/components/responses/ApplicationNotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
    post:
      tags:
        - Application
      requestBody:
        description: Use to create a member.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberInput'
      summary: Create an application member
      description: |
        Create an application member.

        User must have the APPLICATION_MEMBER[CREATE] permission.
      operationId: createApplicationMember
      responses:
        201:
          description: Created member
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Member'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          $ref: '#/components/responses/ApplicationNotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /applications/{applicationId}/members/_transfer_ownership:
    parameters:
      - $ref: '#/components/parameters/applicationIdParam'
    post:
      tags:
        - Application
      requestBody:
        description: Use to transfer ownership of an application.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransferOwnershipInput'
      summary: Transfer the ownership of the application
      description: |
        Transfer the ownership of the application.

        User must have the APPLICATION_MEMBER[UPDATE] permission.
      operationId: transferMemberOwnership
      responses:
        204:
          description: No-Content
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          $ref: '#/components/responses/ApplicationNotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /applications/{applicationId}/members/{memberId}:
    parameters:
      - $ref: '#/components/parameters/applicationIdParam'
      - $ref: '#/components/parameters/memberIdParam'
    get:
      tags:
        - Application
      summary: Get an application member
      description: |
        Get an application member.

        User must have the APPLICATION_MEMBER[READ] permission.
      operationId: getApplicationMemberByApplicationIdAndMemberId
      responses:
        200:
          description: A member
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Member'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          description: Application or Member not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
    put:
      tags:
        - Application
      requestBody:
        description: Use to update a member.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberInput'
      summary: Update an application member.
      description: |
        Update an application member.

        User must have the APPLICATION_MEMBER[UPDATE] permission.
      operationId: updateApplicationMemberByApplicationIdAndMemberId
      responses:
        200:
          description: Updated member.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Member'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          description: Application or Member not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
    delete:
      tags:
        - Application
      summary: Remove an application member
      description: |
        Remove an application member.

        User must have the APPLICATION_MEMBER[DELETE] permission.
      operationId: deleteApplicationMember
      responses:
        204:
          description: No-Content
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          description: Application or Member not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /applications/{applicationId}/metadata:
    parameters:
      - $ref: '#/components/parameters/applicationIdParam'
    get:
      tags:
        - Application
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
      summary: List application metadata
      description: |
        List application metadata.

        User must have the APPLICATION_METADATA[READ] permission.
      operationId: getMetadataByApplicationId
      responses:
        200:
          description: List of metadata
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReferenceMetadataResponse'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          $ref: '#/components/responses/ApplicationNotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
    post:
      tags:
        - Application
      requestBody:
        description: Use to create a metadata.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReferenceMetadataInput'
      summary: Create an application metadata
      description: |
        Create an application metadata.

        User must have the APPLICATION_METADATA[CREATE] permission.
      operationId: createApplicationMetadata
      responses:
        201:
          description: Created metadata
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReferenceMetadata'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          $ref: '#/components/responses/ApplicationNotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /applications/{applicationId}/metadata/{metadataId}:
    parameters:
      - $ref: '#/components/parameters/applicationIdParam'
      - $ref: '#/components/parameters/metadataIdParam'
    get:
      tags:
        - Application
      summary: Get an application metadata
      description: |
        Get an application metadata.

        User must have the APPLICATION_METADATA[READ] permission.
      operationId: getApplicationMetadataByApplicationIdAndMetadataId
      responses:
        200:
          description: A metadata
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReferenceMetadata'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          description: Application or Metadata not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
    put:
      tags:
        - Application
      requestBody:
        description: Use to update a metadata.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReferenceMetadataInput'
      summary: Update an application metadata.
      description: |
        Update an application metadata.

        User must have the APPLICATION_METADATA[UPDATE] permission.
      operationId: updateApplicationMetadataByApplicationIdAndMetadataId
      responses:
        200:
          description: Updated metadata.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReferenceMetadata'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          description: Application or Metadata not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
    delete:
      tags:
        - Application
      summary: Remove an application metadata
      description: |
        Remove an application metadata.

        User must have the APPLICATION_METADATA[DELETE] permission.
      operationId: deleteApplicationMetadata
      responses:
        204:
          description: No-Content
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          description: Application or Metadata not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /applications/{applicationId}/analytics:
    parameters:
      - $ref: '#/components/parameters/applicationIdParam'
    get:
      tags:
        - Application
        - Analytics
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
        - $ref: '#/components/parameters/fromQueryParam'
        - $ref: '#/components/parameters/toQueryParam'
        - $ref: '#/components/parameters/intervalQueryParam'
        - $ref: '#/components/parameters/queryQueryParam'
        - $ref: '#/components/parameters/fieldQueryParam'
        - $ref: '#/components/parameters/analyticTypeQueryParam'
        - $ref: '#/components/parameters/analyticRangeQueryParam'
        - $ref: '#/components/parameters/analyticAggregationQueryParam'
        - $ref: '#/components/parameters/analyticOrderQueryParam'
      summary: Get Application analytics
      description: |
        Get the application analytics.

        User must have the APPLICATION_ANALYTICS[READ] permission.
      operationId: getApplicationAnalytics
      responses:
        200:
          description: Analytics
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/DateHistoAnalytics'
                  - $ref: '#/components/schemas/GroupByAnalytics'
                  - $ref: '#/components/schemas/CountAnalytics'
        400:
          description: Invalid query params.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          $ref: '#/components/responses/ApplicationNotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /applications/{applicationId}/configuration:
    parameters:
      - $ref: '#/components/parameters/applicationIdParam'
    get:
      tags:
        - Application
      summary: Get the application type configuration.
      operationId: getApplicationType
      description: |
        Get application type.
      security: []
      responses:
        200:
          description: Application type configuration
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationType'
        500:
          $ref: '#/components/responses/InternalServerError'
  /applications/{applicationId}/logs:
    parameters:
      - $ref: '#/components/parameters/applicationIdParam'
    get:
      tags:
        - Application
        - Analytics
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
        - $ref: '#/components/parameters/fromQueryParam'
        - $ref: '#/components/parameters/toQueryParam'
        - $ref: '#/components/parameters/queryQueryParam'
        - $ref: '#/components/parameters/fieldQueryParam'
        - $ref: '#/components/parameters/logOrderQueryParam'
      summary: Get Application logs
      description: |
        Get the application logs.

        User must have the APPLICATION_LOG[READ] permission.
      operationId: getApplicationLogs
      responses:
        200:
          description: List of logs
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LogsResponse'
        400:
          description: Invalid query params.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          $ref: '#/components/responses/ApplicationNotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /applications/{applicationId}/logs/_export:
    parameters:
      - $ref: '#/components/parameters/applicationIdParam'
    post:
      tags:
        - Application
        - Analytics
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
        - $ref: '#/components/parameters/fromQueryParam'
        - $ref: '#/components/parameters/toQueryParam'
        - $ref: '#/components/parameters/queryQueryParam'
        - $ref: '#/components/parameters/fieldQueryParam'
        - $ref: '#/components/parameters/logOrderQueryParam'
      summary: Export application logs as CSV
      description: |
        Export application logs as CSV.

        User must have the APPLICATION_LOG[READ] permission.
      operationId: exportApplicationLogsByApplicationId
      responses:
        200:
          description: CSV export of the logs
          content:
            text/plain:
              schema:
                type: string
        400:
          description: Invalid query params.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          $ref: '#/components/responses/ApplicationNotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /applications/{applicationId}/logs/{logId}:
    parameters:
      - $ref: '#/components/parameters/applicationIdParam'
      - $ref: '#/components/parameters/logIdParam'
    get:
      tags:
        - Application
        - Analytics
      parameters:
        - $ref: '#/components/parameters/logTimestampQueryParam'
      summary: Get a specific log of an application
      description: |
        Get a specific log of an application.

        User must have the APPLICATION_LOG[READ] permission.
      operationId: getApplicationLogByApplicationIdAndLogId
      responses:
        200:
          description: A log
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Log'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          description: Application or Log not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /applications/{applicationId}/_renew_secret:
    parameters:
      - $ref: '#/components/parameters/applicationIdParam'
    post:
      tags:
        - Application
      summary: Renew the client secret for an OAuth2 application
      description: |
        Renew the client secret for an OAuth2 application.

        User must have the APPLICATION_DEFINITION[UPDATE] permission.
      operationId: renewApplicationSecret
      responses:
        200:
          description: Updated application with a new secret.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          $ref: '#/components/responses/ApplicationNotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /applications/{applicationId}/subscribers:
    parameters:
      - $ref: '#/components/parameters/applicationIdParam'
    get:
      tags:
        - Application
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
        - $ref: '#/components/parameters/subscriptionStatusesQueryParam'

      summary: List APIs that subscribed with an application
      description: |
        Lists API that current user is allowed to access. May be filtered by status. Ordered by nimber of hits.

        This application has to be accessible by the current user, otherwise a 404 will be returned.
      operationId: getSubscriberApisByApplicationId
      security: []
      responses:
        200:
          description: List accessible APIs for current user
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApisResponse'
        404:
          $ref: '#/components/responses/ApplicationNotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'

  /groups:
    get:
      tags:
        - Group
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
      summary: List groups
      description: |
        List all groups

        User must have the MANAGEMENT_GROUP[READ] permission.
      operationId: getGroups
      responses:
        200:
          description: List of groups
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GroupsResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /groups/{groupId}/members:
    parameters:
      - $ref: '#/components/parameters/groupIdParam'
    get:
      tags:
        - Group
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
      summary: List group members
      description: |
        List group members that have a Application role.

        User must have the MANAGEMENT_GROUP[READ] permission.
      operationId: getMembersByGroupId
      responses:
        200:
          description: List of members
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MembersResponse'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          $ref: '#/components/responses/GroupNotFoundError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /media/{mediaHash}:
    parameters:
      - $ref: '#/components/parameters/mediaHashParam'
    get:
      tags:
        - Portal
      summary: Get the media of the portal.
      operationId: getPortalMedia
      description: |
        Get portal media.
      security: []
      responses:
        200:
          $ref: '#/components/responses/MediaSuccess'
        500:
          $ref: '#/components/responses/InternalServerError'
  /pages:
    get:
      tags:
        - Portal
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
        - $ref: '#/components/parameters/homePageQueryParam'
        - $ref: '#/components/parameters/parentPageQueryParam'
      summary: List portal pages
      description: |
        List all portal documentation pages
      operationId: getPages
      security: []
      responses:
        200:
          $ref: '#/components/responses/PagesSuccess'
        500:
          $ref: '#/components/responses/InternalServerError'
  /pages/{pageId}:
    parameters:
      - $ref: '#/components/parameters/pageIdParam'
    get:
      tags:
        - Portal
      parameters:
        - $ref: '#/components/parameters/pageIncludeParam'
      summary: Get a portal page
      description: |
        Get a specific portal documentation page.
      operationId: getPageByPageId
      security: []
      responses:
        200:
          $ref: '#/components/responses/PageSuccess'
        404:
          description: Page not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /pages/{pageId}/content:
    parameters:
      - $ref: '#/components/parameters/pageIdParam'
    get:
      tags:
        - Portal
      summary: Get the content of a portal page.
      description: |
        Get the contentn of a specific portal documentation page.
      operationId: getPageContentByPageId
      security: []
      responses:
        200:
          description: The content of the portal documentation page.
          content:
            text/plain:
              schema:
                type: string
        404:
          description: Page not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /applications/hooks:
    get:
      tags:
        - Application
      summary: Get the application's hooks list.
      operationId: getHooks
      description: |
        Get application's hooks that can be used in the portal.
      security: []
      responses:
        200:
          description: List of hooks
          content:
            application/json:
              schema:
                description: List of hooks
                type: array
                items:
                  $ref: '#/components/schemas/Hook'
        500:
          $ref: '#/components/responses/InternalServerError'

  /subscriptions:
    get:
      tags:
        - Subscription
      parameters:
        - $ref: '#/components/parameters/apiIdQueryParam'
        - $ref: '#/components/parameters/applicationIdQueryParam'
        - $ref: '#/components/parameters/subscriptionStatusesQueryParam'
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
      description: |
        List all ACCEPTED, PAUSED & PENDING subscriptions, filtered by api and/or by application. At least an api or an application must be provided.

        User must have the APPLICATION_SUBSCRIPTION[READ] permission to list subscription with application query param.\
        User must have the API_SUBSCRIPTION[READ] permission to list subscription with api query param.

      operationId: getSubscriptions
      responses:
        200:
          description: List of Subscriptions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionsResponse'
        400:
          description: At least an api or an application must be provided.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        403:
          $ref: '#/components/responses/PermissionError'
        500:
          $ref: '#/components/responses/InternalServerError'
    post:
      tags:
        - Subscription
      requestBody:
        description: Use to create a subscription.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubscriptionInput'
      summary: Create a subscription.
      description: |
        Create a new subscription.

        User must have APPLICATION_SUBSCRIPTION[CREATE] permission.
      operationId: createSubscription
      responses:
        200:
          description: Created subscription.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subscription'
        400:
          description: Input must not be null.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        403:
          $ref: '#/components/responses/PermissionError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /subscriptions/{subscriptionId}:
    parameters:
      - $ref: '#/components/parameters/subscriptionIdParam'
    get:
      tags:
        - Subscription
      parameters:
        - $ref: '#/components/parameters/subscriptionIncludeQueryParam'

      summary: Get a subscription.
      description: |
        Get a subscription.

        User must have API_SUBSCRIPTION[CREATE] or APPLICATION_SUBSCRIPTION[CREATE] permission.
      operationId: getSubscriptionById
      responses:
        200:
          description: One subscription.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subscription'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          description: Subscription not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /subscriptions/{subscriptionId}/_close:
    parameters:
      - $ref: '#/components/parameters/subscriptionIdParam'
    post:
      tags:
        - Subscription
      summary: Close a subscription
      description: |
        Close a subscription.

        User must have APPLICATION_SUBSCRIPTION[DELETE] permission.
      operationId: closeSubscription
      responses:
        204:
          description: No-Content
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          description: Subscription not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /subscriptions/{subscriptionId}/keys/_renew:
    parameters:
      - $ref: '#/components/parameters/subscriptionIdParam'
    post:
      tags:
        - Subscription
      requestBody:
        description: Use to renew keys of a subscription.
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
      summary: Renew a key subscription.
      description: |
        Renew a key subscription.

        User must have API_SUBSCRIPTION[UPDATE] or APPLICATION_SUBSCRIPTION[UPDATE] permission.
      operationId: renewKeySubscription
      responses:
        201:
          description: Renewed Key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Key'
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          description: Subscription not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /subscriptions/{subscriptionId}/keys/{keyId}/_revoke:
    parameters:
      - $ref: '#/components/parameters/subscriptionIdParam'
      - name: keyId
        in: path
        required: true
        schema:
          type: string
    post:
      tags:
        - Subscription
      summary: Revoke a key subscription.
      description: |
        Revoke a key subscription.

        User must have API_SUBSCRIPTION[UPDATE] or APPLICATION_SUBSCRIPTION[UPDATE] permission.
      operationId: revokeKeySubscription
      responses:
        204:
          description: No-Content
        403:
          $ref: '#/components/responses/PermissionError'
        404:
          description: Subscription or Key not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'

  /users/registration:
    post:
      tags:
        - Users
      summary: Register a new user.
      description: |
        Register a new user for the portal. As a result, an email is sent with an activation link.

        User registration must be enabled.\
        A SMTP server must have been configured.
      operationId: registerNewUser
      requestBody:
        description: Used to register a new User.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterUserInput'
      responses:
        200:
          description: User successfully registered
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        500:
          $ref: '#/components/responses/InternalServerError'

  /users/registration/_finalize:
    post:
      tags:
        - Users
      summary: Finalize user registration.
      description: |
        Create a new user for the portal.

        User registration must be enabled.
      operationId: finalizeUserRegistration
      requestBody:
        description: Used to finalize a user registration.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FinalizeRegistrationInput'
      responses:
        200:
          description: User successfully created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        500:
          $ref: '#/components/responses/InternalServerError'
  /users/_reset_password:
    post:
      tags:
        - Users
      summary: Reset a user's password
      description: |
        Send an email with a link so the user with this email can provide a new password.
        The user must be internally managed and active.
      operationId: resetUserPassword
      requestBody:
        description: Use to reset a user's password.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ResetUserPasswordInput'
      responses:
        204:
          description: The user whose password has been reset.
        400:
          description: Input must not be null or no active and internally managed user has been found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /users/_change_password:
    post:
      tags:
        - Users
      summary: Change a user's password after a reset requests
      description: |
        Perform the password update for a user
      operationId: changeUserPassword
      requestBody:
        description: Use to change a user's password.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChangeUserPasswordInput'
      responses:
        200:
          description: The user whose password has been change.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        400:
          description: Input must not be null or no active and internally managed user has been found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /users/_search:
    post:
      tags:
        - Users
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
        - $ref: '#/components/parameters/usersQueryParam'
      summary: List platform users.
      description: |
        List platform users from identity providers.

        User must have the MANAGEMENT_USERS[READ] permission.
      operationId: getUsers
      responses:
        200:
          description: List of platform users
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UsersResponse'
        403:
          $ref: '#/components/responses/PermissionError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /users/{userId}/avatar:
    parameters:
      - $ref: '#/components/parameters/userIdParam'
    get:
      tags:
        - Users
      summary: Retrieve a user's avatar
      description: |
        Retrieve a user's avatar.
      operationId: getUserAvatar
      responses:
        200:
          $ref: '#/components/responses/PictureSuccess'
        500:
          $ref: '#/components/responses/InternalServerError'
  /user:
    get:
      tags:
        - User
      summary: Get the authenticated user
      description: |
        Get information about the authenticated user.
      operationId: getCurrentUser
      responses:
        200:
          description: The current user
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        500:
          $ref: '#/components/responses/InternalServerError'
    put:
      tags:
        - User
      requestBody:
        description: Use to update a user.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserInput'
      summary: Modify current user information.
      description: |
        Modify current user information.

        Only the current user can modify his/her information.
      operationId: updateCurrentUser
      responses:
        200:
          description: Updated user
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        400:
          description: Input must not be null.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        403:
          description: Not allowed to modify another user.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /user/notifications:
    get:
      tags:
        - User
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
      summary: Retrieve user's notifications
      description: |
        Retrieve current user's notifications.
      operationId: getCurrentUserNotifications
      responses:
        200:
          description: List of notifications
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PortalNotificationsResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
    delete:
      tags:
        - User
      summary: Delete all notifications of the current user
      description: |
        Delete all notifications of the current user.
      operationId: deleteAllCurrentUserNotifications
      responses:
        204:
          description: No-Content
        500:
          $ref: '#/components/responses/InternalServerError'
  /user/notifications/{notificationId}:
    parameters:
      - $ref: '#/components/parameters/notificationIdParam'
    delete:
      tags:
        - User
      summary: Delete a specific notification of the current user
      description: |
        Delete a specific notification of the current user.
      operationId: deleteCurrentUserNotificationByNotificationId
      responses:
        204:
          description: No-Content
        404:
          description: Notification not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /user/avatar:
    get:
      tags:
        - User
      summary: Retrieve user's avatar
      description: |
        Retrieve user's avatar.
      operationId: getCurrentUserAvatar
      responses:
        200:
          $ref: '#/components/responses/PictureSuccess'
        500:
          $ref: '#/components/responses/InternalServerError'
  /permissions:
    get:
      tags:
        - Permissions
      parameters:
        - $ref: '#/components/parameters/apiIdQueryParam'
        - $ref: '#/components/parameters/applicationIdQueryParam'
      summary: Retrieve user's permissions
      description: |
        Retrieve user's permissions.
      operationId: getCurrentUserPermissions
      responses:
        200:
          description: List of user's permissions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PermissionsResponse'
        403:
          $ref: '#/components/responses/PermissionError'
        500:
          $ref: '#/components/responses/InternalServerError'

  /tickets:
    post:
      tags:
        - Portal
      requestBody:
        description: a new ticket to create
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TicketInput'
      summary: Create a ticket.
      description: |
        Create a ticket. This ticket can aim :
          * a specific application
          * a specific API
          * the gravitee portal

        User must be authenticated to use this service.
      operationId: createTicket
      responses:
        201:
          description: Created
        500:
          $ref: '#/components/responses/InternalServerError'
    get:
      tags:
        - Portal
      parameters:
        - $ref: '#/components/parameters/apiIdQueryParam'
        - $ref: '#/components/parameters/applicationIdQueryParam'
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
        - $ref: '#/components/parameters/orderQueryParam'
      description: |
        List all tickets written by current user

      operationId: getTickets
      responses:
        200:
          description: List of Tickets
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TicketsResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /categories:
    get:
      tags:
        - Portal
      parameters:
        - $ref: '#/components/parameters/pageNumberParam'
        - $ref: '#/components/parameters/pageSizeParam'
      summary: Get a Category list
      description: |
        Get all categories of the platform.
      operationId: getCategories
      security: []
      responses:
        200:
          description: List of Categories
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CategoriesResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /categories/{categoryId}:
    parameters:
      - $ref: '#/components/parameters/categoryIdParam'
    get:
      tags:
        - Portal
      summary: Get a Category
      description: |
        Get a specific category.
      operationId: getCategoryByCategoryId
      security: []
      responses:
        200:
          description: One Category
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Category'
        404:
          description: Category not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /categories/{categoryId}/picture:
    parameters:
      - $ref: '#/components/parameters/categoryIdParam'
    get:
      tags:
        - Portal
      summary: Get picture of a Category
      description: |
        Get the picture of a category.
      operationId: getPictureByCategoryId
      security: []
      responses:
        200:
          $ref: '#/components/responses/PictureSuccess'
        404:
          description: Category not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /categories/{categoryId}/background:
    parameters:
      - $ref: '#/components/parameters/categoryIdParam'
    get:
      tags:
        - Portal
      summary: Get background of a Category
      description: |
        Get the background of a category.
      operationId: getBackgroundByCategoryId
      security: []
      responses:
        200:
          $ref: '#/components/responses/PictureSuccess'
        404:
          description: Category not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /theme:
    get:
      tags:
        - Portal
      summary: Get portal theme.
      operationId: getPortalTheme
      description: |
        Get portal theme.
      security: []
      responses:
        200:
          description: Portal configuration
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ThemeResponse'
        404:
          description: Theme not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /configuration:
    get:
      tags:
        - Portal
      summary: Get portal configuration.
      operationId: getPortalConfiguration
      description: |
        Get all the portal configuration from the platform settings.
      security: []
      responses:
        200:
          description: Portal configuration
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConfigurationResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /configuration/identities:
    get:
      tags:
        - Portal
      summary: Get the identity provider list.
      operationId: getPortalIdentityProviders
      description: |
        Get all the identity providers that can used in the portal.
      security: []
      responses:
        200:
          description: List of identity providers
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConfigurationIdentitiesResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /configuration/identities/{identityProviderId}:
    parameters:
      - $ref: '#/components/parameters/identityProviderIdParam'
    get:
      tags:
        - Portal
      summary: Get an identity provider.
      operationId: getPortalIdentityProvider
      description: |
        Get a specific identity provider by its id.
      security: []
      responses:
        200:
          description: An identity provider
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdentityProvider'
        500:
          $ref: '#/components/responses/InternalServerError'
  /configuration/links:
    get:
      tags:
        - Portal
      summary: Get the portal links for header and footer.
      operationId: getPortalLinks
      description: |
        Get all the links (internal and external) to be displayed in the header and in the footer of the portal.
      security: []
      responses:
        200:
          description: List of Links
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LinksResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /configuration/applications/types:
    get:
      tags:
        - Portal
      summary: Get the application types list.
      operationId: getEnabledApplicationTypes
      description: |
        Get enabled application types.
      security: []
      responses:
        200:
          description: List of enabled application types
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConfigurationApplicationTypesResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /configuration/applications/roles:
    get:
      tags:
        - Portal
      summary: Get the application roles list.
      operationId: getApplicationRoles
      description: |
        Get application roles.
      security: []
      responses:
        200:
          description: List of application roles
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConfigurationApplicationRolesResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /configuration/users/custom-fields:
    get:
      tags:
        - Users
      summary: List all the Custom User Fields.
      description: |
        Provide the list of custom user fields asked to the new users.
      operationId: listCustomUserFields
      responses:
        200:
          description: The list of custom user fields
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CustomUserFields'
        500:
          $ref: '#/components/responses/InternalServerError'
  /info:
    get:
      tags:
        - Portal
      summary: Get portal information.
      operationId: getPortalInformation
      description: |
        Get some information about the portal (version, ...).
      security: []
      responses:
        200:
          description: API information
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Info'
        500:
          $ref: '#/components/responses/InternalServerError'
  /dashboards:
    get:
      tags:
        - Portal
      summary: Get a Dashboards list
      description: |
        Get all dashboards of the platform.
      operationId: getDashboards
      security: []
      responses:
        200:
          description: List of Dashboards
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Dashboard'
        500:
          $ref: '#/components/responses/InternalServerError'

  /auth/login:
    post:
      tags:
        - Authentication
      operationId: login
      description: |
        Used to get a Gravitee token. This token is mandatory for all the secured resources of the Portal API.
      parameters:
        - name: Authorization
          in: header
          required: true
          description: Basic authentication.
          schema:
            type: string
      responses:
        200:
          $ref: '#/components/responses/AuthSuccess'
        401:
          $ref: '#/components/responses/UnauthorizedError'
        500:
          $ref: '#/components/responses/InternalServerError'
  /auth/logout:
    post:
      tags:
        - Authentication
      operationId: logout
      description: |
        User need to be authenticated to logout.
      responses:
        200:
          description: An empty cookie
          headers:
            set-cookie:
              description: Empty cookie
              schema:
                type: string
                example: Auth-Graviteeio-APIM=;Path=/;Expires=Thu, 01-Jan-1970 00:00:00 GMT;Max-Age=0;HttpOnly
        500:
          $ref: '#/components/responses/InternalServerError'
  /auth/oauth2/{identity}:
    post:
      tags:
        - Authentication
      security: []
      parameters:
        - $ref: '#/components/parameters/authIdentityParam'
      operationId: exchangeAuthorizationCode
      description: |
        Used to get a gravitee token from an Authorization code (PayloadInput.code). Portal API authenticates the user with the specified IDP ({identity} path param).
      requestBody:
        description: OAuth2 payload for authentication.
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PayloadInput'
      responses:
        200:
          $ref: '#/components/responses/AuthSuccess'
        401:
          $ref: '#/components/responses/UnauthorizedError'
        404:
          description: Identity not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'
  /auth/oauth2/{identity}/_exchange:
    post:
      tags:
        - Authentication
      security: []
      parameters:
        - $ref: '#/components/parameters/authIdentityParam'
        - name: token
          in: query
          required: true
          schema:
            type: string
      operationId: tokenExchange
      description: |
        Used to get a gravitee token from a IdentityProvider token. Portal API authenticates the user with the specified IDP ({identity} path param).
      responses:
        200:
          $ref: '#/components/responses/AuthSuccess'
        401:
          $ref: '#/components/responses/UnauthorizedError'
        404:
          description: Identity not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        500:
          $ref: '#/components/responses/InternalServerError'

components:
  requestBodies:
    pictureUpdateInputBody:
      description: Use to update a picture.
      content:
        'image/*':
          schema:
            type: string
            format: binary
  parameters:
    ##############
    # Path Param #
    ##############
    apiIdParam:
      name: apiId
      in: path
      required: true
      description: Id of an API.
      schema:
        type: string
    applicationIdParam:
      name: applicationId
      in: path
      required: true
      description: Id of an application.
      schema:
        type: string
    groupIdParam:
      name: groupId
      in: path
      required: true
      description: Id of a group.
      schema:
        type: string
    logIdParam:
      name: logId
      in: path
      required: true
      description: Id of a log.
      schema:
        type: string
    memberIdParam:
      name: memberId
      in: path
      required: true
      description: Id of a member.
      schema:
        type: string
    metadataIdParam:
      name: metadataId
      in: path
      required: true
      description: Id of an application metadata.
      schema:
        type: string
    notificationIdParam:
      name: notificationId
      in: path
      required: true
      description: Id of a notification.
      schema:
        type: string
    pageIdParam:
      name: pageId
      in: path
      required: true
      description: Id of a documentation page.
      schema:
        type: string
    subscriptionIdParam:
      name: subscriptionId
      in: path
      required: true
      description: Id of a subscription.
      schema:
        type: string
    categoryIdParam:
      name: categoryId
      in: path
      required: true
      description: Id of a Category.
      schema:
        type: string
    authIdentityParam:
      name: identity
      in: path
      required: true
      schema:
        type: string
    identityProviderIdParam:
      name: identityProviderId
      in: path
      required: true
      description: Id of an identity provider.
      schema:
        type: string
    ratingIdParam:
      name: ratingId
      in: path
      required: true
      description: Id of an rating
      schema:
        type: string
    answerIdParam:
      name: answerId
      in: path
      required: true
      description: Id of an rating answer
      schema:
        type: string
    userIdParam:
      name: userId
      in: path
      required: true
      description: Id of a user
      schema:
        type: string
    mediaHashParam:
      name: mediaHash
      in: path
      required: true
      description: Hash of media
      schema:
        type: string
    ###############
    # Query Param #
    ###############

    #Common
    apiIdQueryParam:
      name: apiId
      in: query
      required: false
      description: Id of an api.
      schema:
        type: string
    applicationIdQueryParam:
      name: applicationId
      in: query
      required: false
      description: Id of an application.
      schema:
        type: string
    mineQueryParam:
      name: mine
      in: query
      required: false
      description: If true, returns only connected user data.
      schema:
        type: boolean

    #Pagination
    pageNumberParam:
      name: page
      in: query
      required: false
      description: The page number for pagination.
      schema:
        type: integer
        default: 1
    pageSizeParam:
      name: size
      in: query
      required: false
      description: |
        The number of items per page for pagination.
        If the size is 0, the response contains only metadata and returns the values as for a non-paged resource.
        If the size is -1, the response contains all datas.
      schema:
        type: integer
        default: 10

    #Apis filtering
    apiContextPathQueryParam:
      name: context-path
      in: query
      required: false
      description: The context-path of an API.
      schema:
        type: string
    apiLabelQueryParam:
      name: label
      in: query
      required: false
      description: One of the labels of an API.
      schema:
        type: string
    apiVersionQueryParam:
      name: version
      in: query
      required: false
      description: The version of an API.
      schema:
        type: string
    apiNameQueryParam:
      name: name
      in: query
      required: false
      description: The name of an API.
      schema:
        type: string
    apiCategoryQueryParam:
      name: category
      in: query
      required: false
      description: One of the category linked with an API.
      schema:
        type: string
    apiFilterQueryParam:
      name: filter
      in: query
      required: false
      description: |
        Name of a FILTER. A filter is used to pre-select some APIs. It can be combined with others query params.
          - FEATURED : top APIs. Sorted by specific order.
          - MINE : APIs subscribed by the current user. Sorted by alphabetical order.
          - STARRED: Rated APIs. Sorted by Ratings DESC, nb of ratings DESC, alphabetic order.
          - TRENDINGS: Subscribed APIs. Sorted by number of subscriptions DESC, alphabetic order.
      schema:
        $ref: '#/components/schemas/FilterApiQuery'
    apiFilterExcludedQueryParam:
      name: -filter
      in: query
      required: false
      description: |
        Name of a FILTER to exclude. Excluded filter has priority over filter. A filter is used to pre-select some APIs. It can be combined with others query params.
          - FEATURED : not in top APIs. Sorted by specific order.
          - MINE : APIs not subscribed by the current user. Sorted by alphabetical order.
          - STARRED: not rated APIs. Sorted by Ratings DESC, nb of ratings DESC, alphabetic order.
          - TRENDINGS: not subscribed APIs. Sorted by number of subscriptions DESC, alphabetic order.
      schema:
        $ref: '#/components/schemas/FilterApiQuery'
    apiPromotedQueryParam:
      name: promoted
      in: query
      required: false
      description: |
        Allow to filter on promoted APIs or not.
          - If absent, no effect on the result
          - If *false*, removes the promoted API of the list
          - If *true*, returns only the promoted API of the list

        A promoted API is either the highlighted API of a category (if it exists) or the first API in the list.
      schema:
        type: boolean
    apiQueryParam:
      name: q
      in: query
      required: true
      description: query string to be used in the search engine
      schema:
        type: string
    apiIncludeParam:
      name: include
      in: query
      required: false
      description: Comma-separated list of related objects to include in the response.
      schema:
        type: array
        items:
          type: string
          enum:
            - pages
            - plans
    ratingOrderQueryParam:
      name: order
      in: query
      required: false
      description: |
        A  list of "field" elements.
        By default, sort is ASC. If *field* starts with '-', the order sort is DESC.\
        Currently, only **value**, **date** and **answers** are supported.
      example: "order=value"
      schema:
        type: string

    #Applications filtering
    forSubscriptionParam:
      name: forSubscription
      in: query
      required: false
      description: If true, only return applications with APPLICATION_SUBSCRIPTION[CREATE] permission.
      schema:
        type: boolean
    applicationOrderQueryParam:
      name: order
      in: query
      required: false
      description: |
        A  list of "field" elements or *nbSubscriptions*.
        By default, sort is ASC. If *field* starts with '-', the order sort is DESC.\
        Currently, only **name** and **nbSubscriptions** are supported.
      example: "order=-nbSubscriptions"
      schema:
        type: string

    #Pages filtering
    homePageQueryParam:
      name: homepage
      in: query
      required: false
      description: If true, only the documentation homepage of the portal is returned.
      schema:
        type: boolean
    parentPageQueryParam:
      name: parent
      in: query
      required: false
      description: The name of the parent documentation page. If not null, only this page and its children are returned.
      schema:
        type: string
    pageIncludeParam:
      name: include
      in: query
      required: false
      description: Comma-separated list of related objects to include in the response.
      schema:
        type: array
        items:
          type: string
          enum:
            - content
    #Analytics & logs filtering
    fromQueryParam:
      name: from
      in: query
      required: false
      description: Lower bound of timestamp for filtering.
      schema:
        type: integer
        format: int64
    toQueryParam:
      name: to
      in: query
      required: false
      description: Upper bound of timestamp for filtering. Must be greater than *from* query param.
      schema:
        type: integer
        format: int64
    queryQueryParam:
      name: query
      in: query
      required: false
      description: Query used for filtering.
      schema:
        type: string
    fieldQueryParam:
      name: field
      in: query
      required: false
      description: Field used for filtering. **required** when type is **GROUP_BY**.
      schema:
        type: string
    intervalQueryParam:
      name: interval
      in: query
      required: false
      description: Interval for time search. Must be >= 1 000 and <= 1 000 000 000.
      schema:
        type: integer
        minimum: 1000
        maximum: 1000000000
    analyticTypeQueryParam:
      name: type
      in: query
      required: false
      description: |
        Type of analytics that is expected :
          - GROUP_BY :
              Used to group total hits by a specific field (Application, Status, Path, ...).\
              Query params :
              - from
              - to
              - interval
              - query
              - field
              - order
              - ranges
          - DATE_HISTO :
              Used to retrieve total hits per range of time, on a specific time interval.\
              Query params :
              - from
              - to
              - interval
              - query
              - aggs
          - COUNT :
              Used to retrieve total hits, on a specific time interval.\
              Query params :
              - from
              - to
              - interval
              - query
          - STATS :
              Used to retrieve stats data, on a specific time interval.\
              Query params :
              - from
              - to
              - query
      schema:
        type: string
        enum:
          - GROUP_BY
          - DATE_HISTO
          - COUNT
          - STATS
    analyticRangeQueryParam:
      name: ranges
      in: query
      required: false
      description: |
        Used with GROUP_BY type only.

        A semicolon separated list of "from:to" elements. **/!\\ Different from *from* and *to* query params**
      example: "ranges=100:199;200:299;300;599"
      schema:
        type: string
    analyticAggregationQueryParam:
      name: aggs
      in: query
      required: false
      description: |
        Used with DATE_HISTO type only.

        A semicolon separated list of "type:field" elements. **/!\\ Different from *type* and *field* query params**\
        Type can be **FIELD**, **AVG**, **MIN**, **MAX**
      example: "aggs=avg:response-time;avg:api-response-time"
      schema:
        type: string
    analyticOrderQueryParam:
      name: order
      in: query
      required: false
      description: |
        Used with GROUP_BY type only.

        A colon separated list of "type:field" elements. **/!\\ Different from *type* and *field* query params**\
        By default, sort is ASC. If *type* starts with '-', the order sort is DESC.\
        Currently, only **AVG** is supported.
      example: "order=-avg:response-time"
      schema:
        type: string
    orderQueryParam:
      name: order
      in: query
      required: false
      description: |
        Used to sort result.

        By default, sort is ASC. If *type* starts with '-', the order sort is DESC
      example: "order=-created_at"
      schema:
        type: string
    logOrderQueryParam:
      name: order
      in: query
      required: false
      description: Order used to sort the result list.
      schema:
        type: string
        enum:
          - ASC
          - DESC
        default: ASC
    logTimestampQueryParam:
      name: timestamp
      in: query
      required: false
      description: Used to select the right index
      schema:
        type: integer
        format: int64

    #Subscriptions filtering
    subscriptionStatusesQueryParam:
      name: statuses
      in: query
      required: false
      description: status of subscription.
      schema:
        type: array
        items:
          type: string
          enum:
            - ACCEPTED
            - CLOSED
            - PAUSED
            - PENDING
            - REJECTED
    subscriptionIncludeQueryParam:
      name: include
      in: query
      required: false
      description: Comma-separated list of related objects to include in the response.
      schema:
        type: array
        items:
          type: string
          enum:
            - keys

    #Users filtering
    usersQueryParam:
      name: q
      in: query
      required: false
      description: query string to be used in the search engine
      schema:
        type: string
  schemas:
    #####################
    # Responses Objects #
    #####################
    ErrorResponse:
      properties:
        errors:
          description: List of errors
          type: array
          items:
            $ref: '#/components/schemas/Error'

    ApisResponse:
      properties:
        data:
          description: List of API.
          type: array
          items:
            $ref: '#/components/schemas/Api'
        metadata:
          $ref: '#/components/schemas/MetadataMap'
        links:
          $ref: '#/components/schemas/Links'
    ApplicationsResponse:
      properties:
        data:
          description: List of applications.
          type: array
          items:
            $ref: '#/components/schemas/Application'
        metadata:
          $ref: '#/components/schemas/MetadataMap'
        links:
          $ref: '#/components/schemas/Links'
    GroupsResponse:
      properties:
        data:
          description: List of groups.
          type: array
          items:
            $ref: '#/components/schemas/Group'
        metadata:
          $ref: '#/components/schemas/MetadataMap'
        links:
          $ref: '#/components/schemas/Links'
    PagesResponse:
      properties:
        data:
          description: List of pages.
          type: array
          items:
            $ref: '#/components/schemas/Page'
        metadata:
          $ref: '#/components/schemas/MetadataMap'
        links:
          $ref: '#/components/schemas/Links'
    RatingsResponse:
      properties:
        data:
          description: List of ratings.
          type: array
          items:
            $ref: '#/components/schemas/Rating'
        metadata:
          $ref: '#/components/schemas/MetadataMap'
        links:
          $ref: '#/components/schemas/Links'
    PlansResponse:
      properties:
        data:
          description: List of data.
          type: array
          items:
            $ref: '#/components/schemas/Plan'
        metadata:
          $ref: '#/components/schemas/MetadataMap'
        links:
          $ref: '#/components/schemas/Links'
    MembersResponse:
      properties:
        data:
          description: List of members.
          type: array
          items:
            $ref: '#/components/schemas/Member'
        metadata:
          $ref: '#/components/schemas/MetadataMap'
        links:
          $ref: '#/components/schemas/Links'
    ReferenceMetadataResponse:
      properties:
        data:
          description: List of application metadata.
          type: array
          items:
            $ref: '#/components/schemas/ReferenceMetadata'
        metadata:
          $ref: '#/components/schemas/MetadataMap'
        links:
          $ref: '#/components/schemas/Links'
    UsersResponse:
      properties:
        data:
          description: List of users.
          type: array
          items:
            $ref: '#/components/schemas/User'
        metadata:
          $ref: '#/components/schemas/MetadataMap'
        links:
          $ref: '#/components/schemas/Links'
    CategoriesResponse:
      properties:
        data:
          description: List of categories.
          type: array
          items:
            $ref: '#/components/schemas/Category'
        metadata:
          $ref: '#/components/schemas/MetadataMap'
        links:
          $ref: '#/components/schemas/Links'
    PortalNotificationsResponse:
      properties:
        data:
          description: List of portal notifications.
          type: array
          items:
            $ref: '#/components/schemas/PortalNotification'
        metadata:
          $ref: '#/components/schemas/MetadataMap'
        links:
          $ref: '#/components/schemas/Links'
    LogsResponse:
      properties:
        data:
          description: List of logs.
          type: array
          items:
            $ref: '#/components/schemas/Log'
        metadata:
          $ref: '#/components/schemas/MetadataMap'
        links:
          $ref: '#/components/schemas/Links'
    SubscriptionsResponse:
      properties:
        data:
          description: List of subscriptions.
          type: array
          items:
            $ref: '#/components/schemas/Subscription'
        metadata:
          $ref: '#/components/schemas/MetadataMap'
        links:
          $ref: '#/components/schemas/Links'
    TicketsResponse:
      properties:
        data:
          description: List of tickets.
          type: array
          items:
            $ref: '#/components/schemas/Ticket'
        metadata:
          $ref: '#/components/schemas/MetadataMap'
        links:
          $ref: '#/components/schemas/Links'
    ConfigurationIdentitiesResponse:
      properties:
        data:
          description: List of identity providers
          type: array
          items:
            $ref: '#/components/schemas/IdentityProvider'
        metadata:
          $ref: '#/components/schemas/MetadataMap'
        links:
          $ref: '#/components/schemas/Links'
    ConfigurationApplicationTypesResponse:
      properties:
        data:
          description: List of application types
          type: array
          items:
            $ref: '#/components/schemas/ApplicationType'
    ConfigurationApplicationRolesResponse:
      properties:
        data:
          description: List of application roles
          type: array
          items:
            $ref: '#/components/schemas/ApplicationRole'
    LinksResponse:
      properties:
        slots:
          description: |
            Map of CategorizedLinks. Keys of the map can be:
            * aside
            * header
            * topfooter
            * footer
          additionalProperties:
            type: array
            items:
              $ref: '#/components/schemas/CategorizedLinks'
    PermissionsResponse:
      description: Map of Permissions.
      properties:
        METADATA:
          type: array
          items:
            type: string
        DOCUMENTATION:
          type: array
          items:
            type: string
        DEFINITION:
          type: array
          items:
            type: string
        PLAN:
          type: array
          items:
            type: string
        SUBSCRIPTION:
          type: array
          items:
            type: string
        MEMBER:
          type: array
          items:
            type: string
        ANALYTICS:
          type: array
          items:
            type: string
        EVENT:
          type: array
          items:
            type: string
        HEALTH:
          type: array
          items:
            type: string
        LOG:
          type: array
          items:
            type: string
        GATEWAY_DEFINITION:
          type: array
          items:
            type: string
        AUDIT:
          type: array
          items:
            type: string
        RATING:
          type: array
          items:
            type: string
        RATING_ANSWER:
          type: array
          items:
            type: string
        NOTIFICATION:
          type: array
          items:
            type: string
        MESSAGE:
          type: array
          items:
            type: string
        ALERT:
          type: array
          items:
            type: string
        RESPONSE_TEMPLATES:
          type: array
          items:
            type: string
        REVIEWS:
          type: array
          items:
            type: string
        QUALITY_RULE:
          type: array
          items:
            type: string

    #####################
    # Resources Objects #
    #####################
    Error:
      properties:
        status:
          description: Status HTTP of the error
          type: string
        message:
          description: Message of the error
          type: string
        code:
          description: Technical code of the error
          type: string
        parameters:
          description: Parameters
          type: object
          additionalProperties:
            type: string
    Api:
      description: |
        Describes an API.
      required:
        - id
        - name
        - version
        - description
        - owner
      properties:
        id:
          description: Unique identifier of an API.
          type: string
        name:
          description: Name of the API.
          type: string
        version:
          description: Version of the API.
          type: string
        description:
          description: Description of the API.
          type: string
        draft:
          type: boolean
          description: Whether or not the API is in draft.
        public:
          type: boolean
          description: Whether or not the API is public.
        running:
          type: boolean
          description: Whether or not the API is running.
        entrypoints:
          description: List of all the avaible endpoints to call the API.
          type: array
          items:
            type: string
        labels:
          description: List of labels linked to this API.
          type: array
          items:
            type: string
        owner:
          $ref: '#/components/schemas/User'
        updated_at:
          description: Last update date and time.
          type: string
          format: date-time
        categories:
          description: List of categories this API belongs to.
          type: array
          items:
            type: string
        rating_summary:
          $ref: '#/components/schemas/RatingSummary'
        _links:
          $ref: '#/components/schemas/ApiLinks'

        ###################
        # may be included #
        ###################
        pages:
          description: |
            Only returned with */apis/{apiId}*.
            Need *include* query param to contain 'pages'.

            The documentation pages of this API. Same as */apis/{apiId}/pages*.
          type: array
          items:
            $ref: '#/components/schemas/Page'
        plans:
          description: |
            Only returned with */apis/{apiId}*.
            Need *include* query param to contain 'plans'.

            The plans of this API. Same as */apis/{apiId}/plans*.
          type: array
          items:
            $ref: '#/components/schemas/Plan'
    ApiInformation:
      properties:
        name:
          type: string
          description: Name of api information
        value:
          type: string
          description: Value of api information
    ApiMetrics:
      properties:
        subscribers:
          type: number
          description: Number of applications that have subscribed to this API.
        hits:
          type: number
          description: Number of calls on this API, during last 7 days.
        health:
          type: number
          description: Healthcheck ratio over the last 7 days. It's a decimal number between 0 and 1.
          example: 0.9876
    Group:
      required:
        - id
        - name
      properties:
        id:
          description: Unique identifier of a group.
          type: string
        name:
          description: Name of the group.
          type: string
    Page:
      required:
        - id
        - name
        - type
        - order
      properties:
        id:
          description: Unique identifier of a page.
          type: string
        name:
          description: Name of the page.
          type: string
        type:
          description: Type of documentation.
          type: string
          enum:
            - SWAGGER
            - MARKDOWN
            - FOLDER
            - ROOT
            - LINK
        order:
          description: Order of the documentation page in its folder.
          type: integer
        parent:
          description: Parent page. MAY be null.
          type: string
        updated_at:
          description: Last update date and time.
          type: string
          format: date-time
        configuration:
          $ref: '#/components/schemas/PageConfiguration'
        media:
          description: list of media hash, attached to this page
          type: array
          items:
            $ref: '#/components/schemas/PageMedia'
        metadata:
          description: Array of metadata about the page. This array is filled when the page has been fetched from a distant source (GitHub, GitLab, etc...).
          type: array
          items:
            $ref: '#/components/schemas/Metadata'
        _links:
          $ref: '#/components/schemas/PageLinks'

        ###################
        # may be included #
        ###################
        content:
          description: |
            Only returned with */apis/{apiId}/pages/{pageId}* and */pages/{pageId}*.
            Need *include* query param to contain 'content'.

            The content of the page.
          type: string
        contentRevisionId:
          description:
            The page revision used to fill the content.
          $ref: '#/components/schemas/PageRevisionId'

    PageMedia:
      required:
        - name
        - link
        - type
      properties:
        name:
          description: the name of the media.
          type: string
        link:
          description: link to download the media.
          type: string
        type:
          description: type of the media.
          type: string

    Plan:
      required:
        - id
        - name
        - security
        - type
        - description
        - validation
        - order
        - comment_required
      properties:
        id:
          description: Unique identifier of a plan.
          type: string
        name:
          description: Name of the plan.
          type: string
        security:
          description: Security used with this plan.
          type: string
          enum:
            - API_KEY
            - KEY_LESS
            - JWT
            - OAUTH2
        description:
          description: Description of the plan.
          type: string
        characteristics:
          description: List of additionnal terms to describe the plan.
          type: array
          items:
            type: string
        validation:
          description: Type of validation for subscription requests.
          type: string
          enum:
            - AUTO
            - MANUAL
        order:
          description: Priority order
          type: integer
        comment_required:
          description: True if a comment is required when a subscription is created.
          type: boolean
        comment_question:
          description: Content of the message sent to a user creating a subscription.
          type: string
        general_conditions:
          description: The  page reference with general conditions of use for the API.
          type: string
    Rating:
      required:
        - id
        - title
        - value
        - comment
      properties:
        id:
          description: Unique identifier of a rating.
          type: string
        title:
          description: Title of a rating.
          type: string
        value:
          description: Value of the rating. Integer between 1 and 5.
          type: integer
        author:
          $ref: '#/components/schemas/User'
        date:
          description: Date and time of the rating.
          type: string
          format: date-time
        comment:
          description: Comment left by the author to explain the rating.
          type: string
        answers:
          description: Array of answers.
          type: array
          items:
            $ref: '#/components/schemas/RatingAnswer'
    Application:
      properties:
        id:
          description: Unique identifier of an application.
          type: string
        name:
          description: Name of the application.
          type: string
        description:
          description: Description of the application.
          type: string
        applicationType:
          description: Type of the application (Web, Mobile, ...).
          type: string
        hasClientId:
          description:  True if the application has client id.
          type: boolean
        owner:
          $ref: '#/components/schemas/User'
        created_at:
          description: Creation date and time of the application.
          type: string
          format: date-time
        updated_at:
          description: Last update date and time of the application.
          type: string
          format: date-time
        groups:
          description: Array of groups associated to the application.
          type: array
          items:
            $ref: '#/components/schemas/Group'
        picture:
          description: |
            Picture of the application. This attribute is only used to update a picture.\
            To get the application picture, use /application/{applicationId}/picture.
          type: string
          writeOnly: true
        background:
          description: |
            Background of the application. This attribute is only used to update a picture.\
            To get the application picture, use /application/{applicationId}/background.
          type: string
          writeOnly: true
        settings:
          $ref: '#/components/schemas/ApplicationSettings'
        _links:
          $ref: '#/components/schemas/ApplicationLinks'
    PortalNotification:
      properties:
        id:
          description: Unique identifier of a portal notification.
          type: string
        title:
          description: Title of the portal notification.
          type: string
        message:
          description: Content of the notification.
          type: string
        created_at:
          description: Creation date and time of the notification.
          type: string
          format: date-time
    Member:
      properties:
        id:
          description: Unique identifier of a member (user).
          type: string
        user:
          $ref: '#/components/schemas/User'
        created_at:
          description: Creation date and time of the member.
          type: string
          format: date-time
        updated_at:
          description: Last update date and time of the member.
          type: string
          format: date-time
        role:
          description: Role of the member. (OWNER, USER, ...).
          type: string
    ReferenceMetadata:
      required:
        - key
        - name
      properties:
        key:
          description: Unique identifier of a metadata.
          type: string
        name:
          description: Name of the metadata.
          type: string
        application:
          description: Id of the application to which the metadata refers.
          type: string
        format:
          description: format of the metadata value.
          $ref: '#/components/schemas/ReferenceMetadataFormatType'
        value:
          description: value of the metadata. Supports freemarker syntax.
          type: string
        defaultValue:
          description: default value of the metadata.
          type: string
    DateHistoAnalytics:
      properties:
        timestamp:
          $ref: '#/components/schemas/Timerange'
        values:
          description: List of data buckets.
          type: array
          items:
            $ref: '#/components/schemas/Bucket'
    GroupByAnalytics:
      properties:
        values:
          description: Total hits by terms.
          type: object
          additionalProperties:
            type: integer
            format: int64
        metadata:
          $ref: '#/components/schemas/MetadataMap'
    CountAnalytics:
      properties:
        name:
          type: string
        hits:
          type: integer
          format: int64
    Log:
      properties:
        id:
          description: Unique identifier of a log.
          type: string
        timestamp:
          description: Instant of the log.
          type: integer
          format: int64
        transactionId:
          description: Request identifier.
          type: string
        path:
          description: Path of the request.
          type: string
        method:
          $ref: '#/components/schemas/HttpMethod'
        status:
          description: HTTP status code of the request.
          type: integer
        responseTime:
          description: Request duration.
          type: integer
          format: int64
        requestContentLength:
          description: Request content length.
          type: integer
          format: int64
        responseContentLength:
          description: Response content length.
          type: integer
          format: int64
        plan:
          description: Plan used by the request.
          type: string
        api:
          description: API called by the request.
          type: string
        request:
          $ref: '#/components/schemas/Request'
        response:
          $ref: '#/components/schemas/Response'
        metadata:
          $ref: '#/components/schemas/MetadataMap'
        host:
          description: API Gateway host.
          type: string
        user:
          description: User identifier.
          type: string
        securityType:
          description: Security type of the request.
          type: string
        securityToken:
          description: Token used by the request.
          type: string
    Subscription:
      required:
        - id
        - api
        - application
        - plan
        - status
      properties:
        id:
          description: Unique identifier of a subscription.
          type: string
        api:
          description: Subscribed API.
          type: string
        application:
          description: Subscribing application.
          type: string
        plan:
          description: Subscribed plan.
          type: string
        request:
          description: Comment of the user when asking for a subscription.
          type: string
        reason:
          description: Reason of the user when processing (accepting/rejecting) a subscription.
          type: string
        created_at:
          description: Creation date and time of the subscription.
          type: string
          format: date-time
        processed_at:
          description: Date and time when the subscription request was processed.
          type: string
          format: date-time
        start_at:
          description: Start date and time of the subscription.
          type: string
          format: date-time
        end_at:
          description: Expiration date and time of the subscription.
          type: string
          format: date-time
        paused_at:
          description: Paused date and time of the subscription.
          type: string
          format: date-time
        closed_at:
          description: Closed date and time of the subscription.
          type: string
          format: date-time
        subscribed_by:
          description: The user who subscribed.
          type: string
        status:
          description: Status of the subscription.
          type: string
          enum:
            - PENDING
            - ACCEPTED
            - CLOSED
            - REJECTED
            - PAUSED
        ###################
        # may be included #
        ###################
        keys:
          description: |
            Only returned with */subscriptions/{subscriptionId}*.
            Need *include* query param to contain 'keys'.

            List of APIKeys of the subscription.
          type: array
          items:
            $ref: '#/components/schemas/Key'
    Ticket:
      properties:
        id:
          description: Unique identifier of a ticket.
          type: string
        api:
          description: Concerned API.
          type: string
        application:
          description: Concerned application.
          type: string
        subject:
          description: Subject of the ticket.
          type: string
        content:
          description: Content of the ticket.
          type: string
        created_at:
          description: Creation date and time of the ticket.
          type: string
          format: date-time
        from_user:
          description: User identifier of the ticket creator.
          type: string
    User:
      properties:
        id:
          description: Unique identifier of a user.
          type: string
        reference:
          description: Unique reference if user comes from external source. Use for search only.
          type: string
        first_name:
          type: string
        last_name:
          type: string
        display_name:
          type: string
        email:
          type: string
        editable_profile:
          description: True if the user can edit the MyAccount information
          type: boolean
          default: false
        permissions:
          description: Map of Permissions.
          type: object
          properties:
            APPLICATION:
              type: array
              items:
                type: string
            USER:
              type: array
              items:
                type: string
        customFields:
          type: object
          description: Values for CustomUserFields
          additionalProperties: true
        config:
          $ref: '#/components/schemas/UserConfig'
        _links:
          $ref: '#/components/schemas/UserLinks'
    UserConfig:
      properties:
        management_url:
          description: The URL of the Gravitee management UI
          type: string
    Token:
      properties:
        token_type:
          type: string
          enum:
            - BEARER
        token:
          type: string
        state:
          type: string
        access_token:
          type: string
        id_token:
          type: string
    Category:
      properties:
        id:
          description: Unique identifier of a category.
          type: string
        name:
          type: string
        description:
          type: string
        order:
          type: integer
        page:
          description: id of the page used for category documentation.
          type: string
        total_apis:
          type: integer
          format: int64
        _links:
          $ref: '#/components/schemas/CategoryLinks'
    Dashboard:
      properties:
        id:
          description: Unique identifier of a dashboard.
          type: string
        name:
          type: string
        definition:
          type: string
    Info:
      properties:
        name:
          description: Name of the API.
          type: string
        version:
          description: Version of the API.
          type: string
    IdentityProvider:
      properties:
        id:
          description: Unique identifier of an identity provider.
          type: string
        name:
          description: Name of the identity provider.
          type: string
        description:
          description: Description of the identity provider.
          type: string
        client_id:
          description: ClientId of the identity provider.
          type: string
        email_required:
          description: true, if an email is required for this identity provider.
          type: boolean
        type:
          $ref: '#/components/schemas/IdentityProviderType'
        authorizationEndpoint:
          description: Authorization endpoint of the provider.
          type: string
        tokenIntrospectionEndpoint:
          description: Token introspection endpoint of the provider. (Gravitee.io AM and OpenId Connect only)
          type: string
        userLogoutEndpoint:
          description: User logout endpoint of the provider. (Gravitee.io AM and OpenId Connect only)
          type: string
        color:
          description: color to display for this provider. (Gravitee.io AM and OpenId Connect only)
          type: string
        display:
          description: Display style of the provider. (Google only)
          type: string
        requiredUrlParams:
          description: Required URL params of the provider. (Google only)
          type: array
          items:
            type: string
        optionalUrlParams:
          description: Optionnal URL params of the provider. (Github and Google only)
          type: array
          items:
            type: string
        scopes:
          description: Scope list of the provider.
          type: array
          items:
            type: string
    ApplicationRole:
      properties:
        id:
          description: Unique identifier of an application role.
          type: string
        name:
          description: Name of an application role.
          type: string
        default:
          description: is default role ?
          type: boolean
        system:
          description: is system role ?
          type: boolean
    ApplicationType:
      properties:
        id:
          description: Unique identifier of an application type.
          type: string
        name:
          description: Name of an application type.
          type: string
        description:
          description: description of an application type.
          type: string
        requires_redirect_uris:
          description: if true, application type require redirect uri
          type: boolean
        allowed_grant_types:
          description: List of allowed grant types
          type: array
          items:
            $ref: '#/components/schemas/ApplicationGrantType'
        mandatory_grant_types:
          description: List of mandatory grant types
          type: array
          items:
            $ref: '#/components/schemas/ApplicationGrantType'
        default_grant_types:
          description: List of default grant types
          type: array
          items:
            $ref: '#/components/schemas/ApplicationGrantType'
    ApplicationGrantType:
      properties:
        type:
          description: type of grant type
          type: string
        name:
          description: name of grant type
          type: string
    Hook:
      properties:
        id:
          description: Unique identifier of an identity provider.
          type: string
        label:
          description: Label of the hook.
          type: string
        description:
          description: Description of the hook.
          type: string
        category:
          description: Category of the hook.
          type: string
    ThemeResponse:
      properties:
        definition:
          description: The definition of custom theme.
          type: object
        _links:
          $ref: '#/components/schemas/ThemeLinks'
    ConfigurationResponse:
      properties:
        portal:
          $ref: '#/components/schemas/ConfigurationPortal'
        authentication:
          $ref: '#/components/schemas/ConfigurationAuthentication'
        scheduler:
          $ref: '#/components/schemas/ConfigurationScheduler'
        documentation:
          $ref: '#/components/schemas/ConfigurationDocumentation'
        plan:
          $ref: '#/components/schemas/ConfigurationPlan'
        apiReview:
          $ref: '#/components/schemas/Enabled'
        analytics:
          $ref: '#/components/schemas/ConfigurationAnalytics'
        application:
          $ref: '#/components/schemas/ConfigurationApplication'
        recaptcha:
          $ref: '#/components/schemas/ConfigurationReCaptcha'
    ConfigurationPortal:
      properties:
        title:
          description: The portal Title
          type: string
        entrypoint:
          description: Default entrypoint of the gateway.
          type: string
        apikeyHeader:
          description: Api-key Header. Used by portal to display the CURL command.
          type: string
        support:
          $ref: '#/components/schemas/Enabled'
        applicationCreation:
          $ref: '#/components/schemas/Enabled'
        userCreation:
          $ref: '#/components/schemas/Enabled'
        apis:
          $ref: '#/components/schemas/ConfigurationPortalApis'
        analytics:
          $ref: '#/components/schemas/ConfigurationPortalAnalytics'
        rating:
          $ref: '#/components/schemas/ConfigurationPortalRating'
        uploadMedia:
          $ref: '#/components/schemas/ConfigurationPortalMedia'
    ConfigurationPortalApis:
      properties:
        tilesMode:
          $ref: '#/components/schemas/Enabled'
        categoryMode:
          $ref: '#/components/schemas/Enabled'
        apiHeaderShowTags:
          $ref: '#/components/schemas/Enabled'
        apiHeaderShowCategories:
          $ref: '#/components/schemas/Enabled'
    ConfigurationPortalAnalytics:
      properties:
        enabled:
          description: true if Google analytics is activated
          type: boolean
        trackingId:
          description: Tracking ID for Google analytics.
          type: string
    ConfigurationPortalRating:
      properties:
        enabled:
          description: true if rating service is activated
          type: boolean
        comment:
          $ref: '#/components/schemas/ConfigurationPortalRatingComment'
    ConfigurationPortalRatingComment:
      properties:
        mandatory:
          description: true if a comment is required to post a rating.
          type: boolean
    ConfigurationPortalMedia:
      properties:
        enabled:
          description: true if uploading images is allowed
          type: boolean
        maxSizeInBytes:
          description: Maximum size of uploaded images (in bytes)
          type: integer
    ConfigurationAuthentication:
      properties:
        forceLogin:
          $ref: '#/components/schemas/Enabled'
        localLogin:
          $ref: '#/components/schemas/Enabled'
    ConfigurationScheduler:
      properties:
        notificationsInSeconds:
          description: Number of seconds for notification scheduler.
          type: integer
    ConfigurationDocumentation:
      properties:
        url:
          description: URL of the main documentation.
          type: string
    ConfigurationPlan:
      properties:
        security:
          $ref: '#/components/schemas/ConfigurationPlanSecurity'
    ConfigurationPlanSecurity:
      properties:
        apikey:
          $ref: '#/components/schemas/Enabled'
        oauth2:
          $ref: '#/components/schemas/Enabled'
        keyless:
          $ref: '#/components/schemas/Enabled'
        jwt:
          $ref: '#/components/schemas/Enabled'
    ConfigurationAnalytics:
      properties:
        clientTimeout:
          description: HTTP Client Timeout
          type: integer
          format: int64
    ConfigurationApplication:
      properties:
        registration:
          $ref: '#/components/schemas/Enabled'
        types:
          $ref: '#/components/schemas/ConfigurationApplicationTypes'
    ConfigurationApplicationTypes:
      properties:
        simple:
          $ref: '#/components/schemas/Enabled'
        browser:
          $ref: '#/components/schemas/Enabled'
        web:
          $ref: '#/components/schemas/Enabled'
        native:
          $ref: '#/components/schemas/Enabled'
        backend_to_backend:
          $ref: '#/components/schemas/Enabled'
    ConfigurationReCaptcha:
      properties:
        enabled:
          description: flag indication if recaptcha is enabled or not
          type: boolean
        siteKey:
          description: reCaptcha site key
          type: string

    CategorizedLinks:
      properties:
        root:
          type: boolean
          description: true if the links of this category are in system folder and not in a subfolder.
        category:
          type: string
          description: name of the group of links
        links:
          type: array
          items:
            $ref: '#/components/schemas/Link'
    Link:
      properties:
        name:
          type: string
          description: Name of the link.
        resourceRef:
          type: string
          description: target of the link. Can be either a URL id resourceType is 'external' or a UUID if resourceType is 'page' or 'category'.
        resourceType:
          type: string
          description: the type of the link.
          enum:
            - external
            - page
            - category
        folder:
          type: boolean
          description: true if resourceType is 'page' and resourceRef is the id of a folder.
    #################
    # Input Objects #
    #################
    RatingInput:
      properties:
        title:
          type: string
        value:
          type: integer
          minimum: 0
          maximum: 5
        comment:
          type: string
    RatingAnswerInput:
      required:
        - comment
      properties:
        comment:
          type: string
    ApplicationInput:
      properties:
        name:
          type: string
        description:
          type: string
        picture:
          type: string
        groups:
          type: array
          items:
            type: string
        settings:
          $ref: '#/components/schemas/ApplicationSettings'
        background:
          type: string
    MemberInput:
      properties:
        user:
          type: string
          description: User's technical identifier.
        reference:
          type: string
          description: User's reference for user providing from an identity provider.
        role:
          type: string
          description: Role's name
    ReferenceMetadataInput:
      properties:
        name:
          description: Name of the metadata.
          type: string
        format:
          description: format of the metadata value.
          $ref: '#/components/schemas/ReferenceMetadataFormatType'
        value:
          description: value of the metadata. Supports freemarker syntax.
          type: string
        defaultValue:
          description: default value of the metadata.
          type: string
    SubscriptionInput:
      properties:
        application:
          description: Id of the application which subscribe
          type: string
        plan:
          description: Id of the plan to which the application subscribe
          type: string
        request:
          description: A request message to the api owner why a user want to subscribe
          type: string
        general_conditions_accepted:
          description: Specify if the general conditions have been accepted by the API subscriber
          type: boolean
        general_conditions_content_revision:
          description: Page revision of the general conditions visualized and accepted by the API subscriber
          $ref: '#/components/schemas/PageRevisionId'
    TransferOwnershipInput:
      properties:
        new_primary_owner_id:
          description: User identifier of the new Primary Owner of the application.
          type: string
        new_primary_owner_reference:
          description: User reference of the new Primary Owner of the application.
          type: string
        primary_owner_newrole:
          description: New role to be affected to the current PrimaryOwner.
          type: string
    PayloadInput:
      properties:
        client_id:
          type: string
          minLength: 1
        redirect_uri:
          type: string
          minLength: 1
        code:
          type: string
          minLength: 1
        grant_type:
          type: string
          minLength: 1
        code_verifier:
          type: string
        state:
          type: string
    TicketInput:
      required:
        - subject
        - content
      properties:
        subject:
          description: Subject of the ticket.
          type: string
        content:
          description: Description of the ticket.
          type: string
        application:
          description: Application identifier concerned by the ticket.
          type: string
        api:
          description: Api identifer concerned by the ticket.
          type: string
        copy_to_sender:
          description: True if the author of the ticket wants to receive a copy of the ticket.
          type: boolean
    RegisterUserInput:
      required:
        - email
      properties:
        email:
          description: Valid email of the new user.
          type: string
        firstname:
          description: First name of the new user.
          type: string
        lastname:
          description: Last name of the new user.
          type: string
        confirmation_page_url:
          description: URL of the confirmation page to be used in the 'User Registration' email.
          type: string
        customFields:
          type: object
          description: Values for CustomUserFields
          additionalProperties: true
    ChangeUserPasswordInput:
      required:
        - token
        - password
        - firstname
        - lastname
      properties:
        token:
          description: Token of the user to be validated.
          type: string
        password:
          description: Password of the user.
          type: string
          format: password
        firstname:
          description: First name of the user.
          type: string
        lastname:
          description: Last name of the user.
          type: string
    FinalizeRegistrationInput:
      required:
        - token
        - password
        - firstname
        - lastname
      properties:
        token:
          description: Token of the registered user to be validated.
          type: string
        password:
          description: Password of the registered user.
          type: string
        firstname:
          description: First name of the registered user.
          type: string
        lastname:
          description: Last name of the registered user.
          type: string
    UserInput:
      required:
        - id
      properties:
        id:
          description: Unique identifier of a user.
          type: string
        avatar:
          description: Avatar of the user.
          type: string
          writeOnly: true
        first_name:
          description: Firstname of the user.
          type: string
          writeOnly: true
        last_name:
          description: Lastname of the user.
          type: string
          writeOnly: true
        email:
          description: Email of the user.
          type: string
          writeOnly: true
        customFields:
          type: object
          description: Values for CustomUserFields
          additionalProperties: true
    ResetUserPasswordInput:
      required:
        - username
      properties:
        username:
          description: Username of the user.
          type: string
        reset_page_url:
          description: URL of the password reset page to be used in the 'Password reset' email.
          type: string
    NotificationInput:
      properties:
        hooks:
          type: array
          items:
            type: string

    #######################
    # Composition Objects #
    #######################
    ApplicationSettings:
      properties:
        app:
          $ref: '#/components/schemas/SimpleApplicationSettings'
        oauth:
          $ref: '#/components/schemas/OAuthClientSettings'
    SimpleApplicationSettings:
      properties:
        type:
          type: string
        client_id:
          type: string
    OAuthClientSettings:
      properties:
        client_secret:
          type: string
        client_id:
          type: string
        redirect_uris:
          type: array
          items:
            type: string
        client_uri:
          type: string
        logo_uri:
          type: string
        response_types:
          type: array
          items:
            type: string
        grant_types:
          type: array
          items:
            type: string
        application_type:
          type: string
        renew_client_secret_supported:
          type: boolean
    Metadata:
      description: Information about the page, if this page is from an external source.
      properties:
        name:
          type: string
        value:
          type: string
        order:
          type: string
    RatingSummary:
      properties:
        average:
          type: number
          format: double
        count:
          type: number
        one_star:
          type: number
          format: double
        two_star:
          type: number
          format: double
        three_star:
          type: number
          format: double
        four_star:
          type: number
          format: double
        five_star:
          type: number
          format: double
    PageConfiguration:
      description: Technical information about the page
      properties:
        try_it:
          type: boolean
          description: Enable "Try It!" mode in documentation page.
        try_it_anonymous:
          type: boolean
          description: Enable "Try It!" mode in documentation page for anonymous users.
        try_it_url:
          type: string
          description: Base URL used to try the API.
        show_url:
          type: string
          description: Show the URL to download the content.
        display_operation_id:
          type: boolean
          description: Display the operationId in the operations list.
        doc_expansion:
          type: string
          description: |
            Default expansion setting for the operations and tags.\
            Possibles values are :
             - list : Expands only the tags
             - full : Expands the tags and operations
             - none : Expands nothing. DEFAULT.
          enum:
            - list
            - full
            - none
        enable_filtering:
          type: boolean
          description: Add a top bar to filter content.
        show_extensions:
          type: boolean
          description: Display vendor extension (X-) fields and values for Operations, Parameters, and Schema.
        show_common_extensions:
          type: boolean
          description: Display extensions (pattern, maxLength, minLength, maximum, minimum) fields and values for Parameters.
        max_displayed_tags:
          type: number
          description: |
            Number of max tagged operations displayed. \
            Limits the number of tagged operations displayed to at most this many (negative means show all operations).\
            No limit by default.
        viewer:
          type: string
          description: The type of viewer for OpenAPI specification. Default is 'Swagger'
          enum:
            - Swagger
            - Redoc
    RatingAnswer:
      required:
        - id
        - author
        - date
        - comment
      properties:
        id:
          type: string
        author:
          $ref: '#/components/schemas/User'
        date:
          type: string
          format: date-time
        comment:
          type: string
    Key:
      description: Subscription Key
      properties:
        id:
          type: string
        api:
          type: string
        application:
          type: string
        plan:
          type: string
        paused:
          type: boolean
        revoked:
          type: boolean
        expired:
          type: boolean
        created_at:
          type: string
          format: date-time
        revoked_at:
          type: string
          format: date-time
        expire_at:
          type: string
          format: date-time
    HttpMethod:
      type: string
      enum:
        - CONNECT
        - DELETE
        - GET
        - HEAD
        - OPTIONS
        - PATCH
        - POST
        - PUT
        - TRACE
        - OTHER
      default: OTHER
    HttpHeaders:
      description: List of String List
      additionalProperties:
        type: array
        items:
          type: string
    Request:
      description: Request logged by the API Gateway
      properties:
        method:
          $ref: '#/components/schemas/HttpMethod'
        headers:
          $ref: '#/components/schemas/HttpHeaders'
        uri:
          type: string
        body:
          type: string
    Response:
      description: Response logged by the API Gateway
      properties:
        status:
          type: integer
        headers:
          $ref: '#/components/schemas/HttpHeaders'
        body:
          type: string
    MetadataMap:
      description: Map of Map of Object
      type: object
      additionalProperties:
        type: object
        additionalProperties:
          type: object
    Bucket:
      properties:
        buckets:
          type: array
          items:
            $ref: '#/components/schemas/Bucket'
        field:
          type: string
        name:
          type: string
        data:
          type: array
          items:
            type: number
        metadata:
          $ref: '#/components/schemas/MetadataMap'
    Timerange:
      properties:
        from:
          type: integer
          format: int64
        to:
          type: integer
          format: int64
        interval:
          type: integer
          format: int64
    FilterApiQuery:
      type: string
      enum:
        - ALL
        - FEATURED
        - MINE
        - STARRED
        - TRENDINGS
    Enabled:
      properties:
        enabled:
          description: true, if the property is enabled
          type: boolean
    IdentityProviderType:
      description: type of Identity Provider
      type: string
      enum:
        - GOOGLE
        - GITHUB
        - GRAVITEEIO_AM
        - OIDC
    PageRevisionId:
      properties:
        pageId:
          type: string
        revision:
          type: integer
          format: int32
    ReferenceMetadataFormatType:
      type: string
      enum:
        - STRING
        - NUMERIC
        - BOOLEAN
        - DATE
        - MAIL
        - URL
      default: STRING
    #################
    # Links Objects #
    #################
    Links:
      properties:
        self:
          type: string
        first:
          type: string
        last:
          type: string
        prev:
          type: string
        next:
          type: string
    ApiLinks:
      properties:
        self:
          type: string
        links:
          type: string
        metrics:
          type: string
        pages:
          type: string
        picture:
          type: string
        background:
          type: string
        plans:
          type: string
        ratings:
          type: string
    ApplicationLinks:
      properties:
        self:
          type: string
        members:
          type: string
        notifications:
          type: string
        picture:
          type: string
        background:
          type: string
    PageLinks:
      properties:
        self:
          type: string
        content:
          type: string
        parent:
          type: string
    ThemeLinks:
      properties:
        self:
          type: string
        backgroundImage:
          type: string
        logo:
          type: string
        optionalLogo:
          type: string
    UserLinks:
      properties:
        self:
          type: string
        avatar:
          type: string
        notifications:
          type: string
    CategoryLinks:
      properties:
        self:
          type: string
        highlighted_api:
          type: string
        picture:
          type: string
        background:
          type: string
    CustomUserFields:
      description: Definition of addition user registration fields
      properties:
        key:
          description: The field identifier.
          type: string
        label:
          description: The default field label.
          type: string
        required:
          description: The field is mandatory
          type: boolean
        values:
          description: List of authorized values for the field
          type: array
          items:
            type: string
  responses:
    InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    PermissionError:
      description: Insufficient rights to access this resource
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    UnauthorizedError:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    APINotFoundError:
      description: API not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    ApplicationNotFoundError:
      description: Application not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    GroupNotFoundError:
      description: Group not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    AuthSuccess:
      description: Auth token in payload and bearer in cookie
      headers:
        set-cookie:
          description: Auth cookie
          schema:
            type: string
            example: Auth-Graviteeio-APIM=Bearer%20xxxxxx;Path=/;HttpOnly
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Token'
    PageSuccess:
      description: One documentation page
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Page'
    PagesSuccess:
      description: List of pages
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PagesResponse'
    PictureSuccess:
      description: A picture
      content:
        'image/*':
          schema:
            type: string
            format: binary
    MediaSuccess:
      description: A media
      content:
        '*':
          schema:
            type: string
            format: binary

  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic
    CookieAuth:
      type: apiKey
      in: cookie
      name: Auth-Graviteeio-APIM




© 2015 - 2025 Weber Informatics LLC | Privacy Policy