diff --git a/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/build-api.md b/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/build-api.md new file mode 100644 index 00000000000..a910b674467 --- /dev/null +++ b/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/build-api.md @@ -0,0 +1,31 @@ +--- +title: "Private Mendix Platform Build API" +url: /apidocs-mxsdk/apidocs/private-platform-build-api/ +type: swagger +description: "This API allows you to manage packages in Private Mendix Platform." +restapi: true +weight: 60 +linktitle: "Build API" +--- + +{{% alert color="info" %}} +This document is about [Private Mendix Platform](/private-mendix-platform/) API. This API is only available on instances of Private Mendix Platform. For [Mendix on Kubernetes](/developerportal/deploy/private-cloud/) API, see [Mendix on Kubernetes Build API](/apidocs-mxsdk/apidocs/private-cloud-build-api/) and [Mendix on Kubernetes Deploy API](/apidocs-mxsdk/apidocs/private-cloud-deploy-api/). +{{% /alert %}} + +## Introduction + +The Private Mendix Platform Build API allows you to manage app packages in Private Mendix Platform. You can use the API to do the following: + +* Start the build pipeline to create an app package. +* Retrieve all packages for the application. +* Retrieve a specified package for the application. +* Delete a specified package for the application. +* Download a specified package in MDA format. +* Download a specified package in SBOM format. +* Lock or unlock a specified package. + +## API Reference + +### Version 1 + +{{< swaggerui src="/openapi-spec/openapi-build-v1.yaml" >}} diff --git a/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/deploy-api.md b/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/deploy-api.md index efcaa292bf0..daf9e203abd 100644 --- a/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/deploy-api.md +++ b/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/deploy-api.md @@ -14,14 +14,18 @@ This document is about [Private Mendix Platform](/private-mendix-platform/) API. ## Introduction -The Private Mendix Platform Group API allows you to manage environments in Private Mendix Platform. You can use the API to do the following: +The Private Mendix Platform Deploy API allows you to manage environments in Private Mendix Platform. You can use the API to do the following: -* Create a new environment for the application -* Retrieve all environments for the application -* Retrieve a specified environment for the application -* Update a specified environment for the application -* Delete a specified environment for the application +* Create a new environment for the application. +* Retrieve all environments for the application. +* Retrieve a specified environment for the application. +* Update the configuration of a specified environment. +* Delete the configuration and settings of a specified environment. +* Deploy a package or apply changes for a specified environment. +* Get a dashboard with all environments created for the application. ## API Reference -{{< swaggerui src="/openapi-spec/openapi-deploy.yaml" >}} +### Version 1 + +{{< swaggerui src="/openapi-spec/openapi-deploy-v1.yaml" >}} diff --git a/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/group-api.md b/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/group-api.md index b7ac11f41e8..3ed85ca268c 100644 --- a/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/group-api.md +++ b/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/group-api.md @@ -16,13 +16,23 @@ This document is about [Private Mendix Platform](/private-mendix-platform/) API. The Private Mendix Platform Group API allows you to manage user groups in Private Mendix Platform. You can use the API to do the following: -* Get a group by ID -* Get a list of all groups for the current user -* Create, update, or delete a group -* Retrieve a list of all users in a group -* Update group member roles -* Add or remove members from a group +* Get a group by ID. +* Get a list of all groups for the current user. +* Create, update, or delete a group. +* Retrieve a list of all users in a group. +* Update group member roles. +* Add or remove members from a group. +* Retrieve all cluster namespaces assigned to a group. +* Assign a cluster namespace to a group. +* Update the deployment purpose of cluster namespace. +* Remove cluster namespaces from the group. ## API Reference -{{< swaggerui src="/openapi-spec/openapi-group.yaml" >}} +### Version 2 + +{{< swaggerui src="/openapi-spec/openapi-group-v2.yaml" >}} + +### Version 1 + +{{< swaggerui src="/openapi-spec/openapi-group-v1.yaml" >}} diff --git a/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/marketplace-api.md b/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/marketplace-api.md index c9ad0ca1c0e..3adf85ab014 100644 --- a/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/marketplace-api.md +++ b/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/marketplace-api.md @@ -16,22 +16,24 @@ This document is about [Private Mendix Platform](/private-mendix-platform/) API. The Private Mendix Platform Marketplace API allows you to manage the Marketplace in Private Mendix Platform. You can use the API to do the following: -* Retrieve all Marketplace content items -* Create a new Marketplace content item -* Get versions of an existing Marketplace content item -* Create a new version of an existing content item -* Get a single Marketplace content item by ID -* Update a content item -* Delete a Marketplace content that is not published -* Download a specific published content item -* Get a specific version of a Marketplace content item -* Change the owning user and group of a content item -* Get, add, delete, or input the groups of a content item -* Update, publish, retire, activate, or delete a specific version of a Marketplace content item -* Get all Marketplace categories -* Get a single subcategory by ID -* Create, update, or delete a subcategory +* Retrieve all Marketplace content items. +* Create a new Marketplace content item. +* Get versions of an existing Marketplace content item. +* Create a new version of an existing content item. +* Get a single Marketplace content item by ID. +* Update a content item. +* Delete a Marketplace content that is not published. +* Download a specific published content item. +* Get a specific version of a Marketplace content item. +* Change the owning user and group of a content item. +* Get, add, delete, or input the groups of a content item. +* Update, publish, retire, activate, or delete a specific version of a Marketplace content item. +* Get all Marketplace categories. +* Get a single subcategory by ID. +* Create, update, or delete a subcategory. ## API Reference -{{< swaggerui src="/openapi-spec/openapi-marketplace.yaml" >}} +### Version 1 + +{{< swaggerui src="/openapi-spec/openapi-marketplace-v1.yaml" >}} diff --git a/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/pipeline-api.md b/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/pipeline-api.md index ae611356d76..6772dc45f50 100644 --- a/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/pipeline-api.md +++ b/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/pipeline-api.md @@ -16,11 +16,16 @@ This document is about [Private Mendix Platform](/private-mendix-platform/) API. The Private Mendix Platform Project API allows you to manage pipelines in Private Mendix Platform. You can use the API to do the following: -* Get pipeline running information. * Set the current step status of the pipeline. -* Create a pipeline for build or deployment. +* Create and run a pipeline for build or deployment. * Approve or reject a manual step of a waiting pipeline. ## API Reference -{{< swaggerui src="/openapi-spec/pmp-pipeline.yaml" >}} +### Version 2 + +{{< swaggerui src="/openapi-spec/openapi-pipeline-v2.yaml >}} + +### Version 1 + +{{< swaggerui src="/openapi-spec/openapi-pipeline-v1.yaml >}} \ No newline at end of file diff --git a/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/project-api.md b/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/project-api.md index 27d828ad3c4..d020325ae8a 100644 --- a/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/project-api.md +++ b/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/project-api.md @@ -16,15 +16,22 @@ This document is about [Private Mendix Platform](/private-mendix-platform/) API. The Private Mendix Platform Project API allows you to manage projects in Private Mendix Platform. You can use the API to do the following: -* Get a project by ID -* Get a list of all projects for the current user -* Create or delete a project -* Retrieve the project creation status -* Change the project name, description, or status -* Change the owning user and group of a project -* Get all project team members -* Add or remove members and groups from a project +* Get a project by ID. +* Get a list of all projects for the current user. +* Create or delete a project. +* Retrieve the project creation status. +* Change the project name, description, or status. +* Change the owning user and group of a project. +* Get all project team members. +* Get the groups or users with which the project is shared. +* Add or remove members and groups from a project. ## API Reference -{{< swaggerui src="/openapi-spec/openapi-project.yaml" >}} +### Version 2 + +{{< swaggerui src="/openapi-spec/openapi-project-v2.yaml" >}} + +### Version 1 + +{{< swaggerui src="/openapi-spec/openapi-project-v1.yaml" >}} \ No newline at end of file diff --git a/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/user-api.md b/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/user-api.md index 4252b5757eb..e90828b3ed9 100644 --- a/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/user-api.md +++ b/content/en/docs/apidocs-mxsdk/apidocs/private-mendix-platform/user-api.md @@ -16,11 +16,13 @@ This document is about [Private Mendix Platform](/private-mendix-platform/) API. The Private Mendix Platform User API allows you to manage users in Private Mendix Platform. You can use the API to do the following: -* Get a user by ID -* Get a list of all users for the current organization -* Create, update, or delete a user -* Change the password of a user with a specific ID +* Get a user by ID. +* Get a list of all users for the current organization. +* Create, update, or delete a user. +* Change the password of a user with a specific ID. ## API Reference -{{< swaggerui src="/openapi-spec/openapi-user.yaml" >}} +### Version 1 + +{{< swaggerui src="/openapi-spec/openapi-user-v1.yaml" >}} diff --git a/static/openapi-spec/openapi-build-v1.yaml b/static/openapi-spec/openapi-build-v1.yaml new file mode 100644 index 00000000000..46842b504d8 --- /dev/null +++ b/static/openapi-spec/openapi-build-v1.yaml @@ -0,0 +1,545 @@ +openapi: 3.0.4 +info: + title: Build Service v1 + description: "Provide services for build, retrive, lock, unlock and download app packages and sbom files. \r\n" + version: 1.0.0 +servers: + - url: https://pmp-demo.privateplatform.mendix.com/buildservice/v1 +paths: + /apps/{appId}/packages: + post: + tags: + - apps + summary: Start build pipeline to create app package + description: Start build pipeline to create package for specified app + operationId: createPackage + parameters: + - name: appId + in: path + description: App Id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BuildRequest' + examples: + App package build request: + value: + branchName: main + revisionId: 6f995268 + majorVersion: 1 + minorVersion: 0 + patchVersion: 2 + responses: + '202': + $ref: '#/components/responses/BuildResponse' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + get: + tags: + - apps + summary: Retreive all packages of app + description: Retreive all packages of specified app + operationId: listAppPackages + parameters: + - name: appId + in: path + description: App Id + required: true + schema: + type: string + responses: + '200': + $ref: '#/components/responses/packages' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + /apps/{appId}/packages/{packageId}: + get: + tags: + - apps + summary: Retreive a package of app + description: Retreive a package of app with specified appId and packageId + operationId: getAppPackage + parameters: + - name: appId + in: path + description: App Id + required: true + schema: + type: string + - name: packageId + in: path + description: Package Id + required: true + schema: + type: string + responses: + '200': + $ref: '#/components/responses/package' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + delete: + tags: + - apps + summary: 'Delete a package of app ' + description: Delete a package of app with specified appId and packageId + operationId: deleteAppPackage + parameters: + - name: appId + in: path + description: App Id + required: true + schema: + type: string + - name: packageId + in: path + description: Package Id + required: true + schema: + type: string + responses: + '204': + description: Successful operation + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + /apps/{appId}/packages/{packageId}/mdafile: + get: + tags: + - apps + summary: Download a package MDA file of app + description: Download a package MDA file of app with specified appId and packageId + operationId: downloadAppPackageMDA + parameters: + - name: appId + in: path + description: App Id + required: true + schema: + type: string + - name: packageId + in: path + description: Package Id + required: true + schema: + type: string + responses: + '200': + description: successful operation + content: + application/octet-stream: + schema: + type: string + format: binary + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + /apps/{appId}/packages/{packageId}/sbomfile: + get: + tags: + - apps + summary: Download a package SBOM file of app + description: Download a package SBOM file of app with specified appId and packageId + operationId: downloadAppPackageSBOM + parameters: + - name: appId + in: path + description: App Id + required: true + schema: + type: string + - name: packageId + in: path + description: Package Id + required: true + schema: + type: string + responses: + '200': + description: successful operation + content: + application/octet-stream: + schema: + type: string + format: JSON + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + /apps/{appId}/packages/{packageId}/request: + post: + tags: + - apps + summary: Lock or Unlock a package of app + description: Lock or Unlock a package of app with specified appId and packageId + operationId: lockUnlockAppPackage + parameters: + - name: appId + in: path + required: true + description: App Id + schema: + type: string + - name: packageId + in: path + description: Package Id + required: true + schema: + type: string + - name: action + in: query + description: Lock or unlock app package + schema: + enum: + - Lock + - Unlock + type: string + responses: + '200': + description: successful operation + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + +components: + parameters: + appId: + name: appId + in: path + description: App Id + required: true + schema: + type: string + format: uuid + example: e48b3e22-d6ad-4c81-aa5e-603776d22b4d + packageId: + name: packageId + in: path + description: Package Id + required: true + schema: + type: string + format: uuid + example: ec59b4e6-2f27-4068-853a-b811f181d46c + + schemas: + BuildRequest: + title: BuildRequest + type: object + description: Build app package request + properties: + branchName: + type: string + description: App branch name to build. + example: main + revisionId: + type: string + description: App revision ID to build. + example: 6f995268 + majorVersion: + type: integer + format: int32 + description: App major version to build. If not provided, no version tag will be set for the created package. + example: 1 + minorVersion: + type: integer + format: int32 + description: App minor version to build. If not provided, no version will be set for the created package. + example: 0 + patchVersion: + type: integer + format: int32 + description: App patch version to build. If not provided, no version tag will be set for the created package. + example: 2 + required: + - branchName + - revisionId + + BuildJob: + type: object + description: App build job information + properties: + packageId: + type: string + description: App package id + example: 36279c9b-9b5a-4599-b548-7fe09d792f76 + pipelineId: + type: integer + description: Build pipeline id + example: 179862510118532184 + message: + type: string + description: Build job message + example: "Request accepted, build app package started" + + AppPackage: + type: object + description: App build package + properties: + packageId: + type: string + description: App package id + packageName: + type: string + description: App package name + example: mh-local-ui102413-1.0.1.6f995268.mda + branch: + type: string + description: App branch + example: main + revision: + type: string + description: App revision + example: 6f995268 + modelVersion: + type: string + description: Model version + example: 1.0.1.6f995268 + runtimeVersion: + type: string + description: Runtime version + example: 10.24.13.86719 + status: + type: string + description: App package status + example: Success + locked: + type: boolean + description: Whether the package is locked + example: false + createdBy: + type: string + description: The user who created the package + example: muhong00 + dateCreated: + type: string + format: date-time + description: The date and time when the package was created + example: 2026-05-28T03:19:39.244Z + + error: + type: object + description: Error response + properties: + status: + type: integer + description: Response status code. + example: 400 + title: + type: string + description: 'A short, human-readable summary of the problem type.' + example: Bad Request + detail: + type: string + description: A human-readable explanation specific to this occurrence of the problem. + example: Invalid parameters + invalid-params: + type: array + description: '(Optional) JSON list List of name, reason keys for invalid attribute values.' + items: + type: object + properties: + name: + type: string + description: Parameter name. + example: packageId + reason: + type: string + description: Reason for error. + example: Invalid package id + required: + - status + - title + - detail + + responses: + error-401: + description: Authentication information is missing or invalid + content: + application/json: + schema: + $ref: '#/components/schemas/error' + examples: + 401 - Unauthorized: + value: + status: 401 + title: Unauthorized + detail: Authentication information missing or invalid + error-400: + description: Invalid input parameter or request body + content: + application/json: + schema: + $ref: '#/components/schemas/error' + examples: + 400 - Invalid app id: + value: + status: 400 + title: Bad Request + detail: Invalid parameters + invalid-params: + - name: appId + reason: Invalid app id + 400 - Invalid package id: + value: + status: 400 + title: Bad Request + detail: Invalid parameters + invalid-params: + - name: packageId + reason: Invalid package id + error-403: + description: User has no permission for this operation + content: + application/json: + schema: + $ref: '#/components/schemas/error' + examples: + 403 - Forbidden: + value: + status: 403 + title: Forbidden + detail: User has no permission for this operation + error-404: + description: Resource not found + content: + application/json: + schema: + $ref: '#/components/schemas/error' + examples: + 404 - App not found: + value: + status: 404 + title: Not Found + detail: App not found + 404 - App package not found: + value: + status: 404 + title: Not Found + detail: App package not found + + package: + description: App build package + content: + application/json: + schema: + $ref: '#/components/schemas/AppPackage' + examples: + App Package: + value: + packageId: 36279c9b-9b5a-4599-b548-7fe09d792f76 + packageName: mh-local-ui102413-1.0.1.6f995268.mda + branch: main + revision: 6f995268 + modelVersion: 1.0.1.6f995268 + runtimeVersion: 10.24.13.86719 + status: Success + locked: false + createdBy: muhong00 + dateCreated: 2026-05-28T03:19:39.244Z + + packages: + description: App build packages + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AppPackage' + examples: + App Packages: + value: + - packageId: a957ec90-0fb3-4c9a-ace9-89d0fd4f6c2f + packageName: mh-local-ui102413-5e6a49a5.mda + branch: main + revision: 5e6a49a5 + modelVersion: 5e6a49a5 + runtimeVersion: 10.24.13.86719 + status: Success + locked: true + createdBy: muhong00 + dateCreated: 2026-01-07T04:35:57.378Z + - packageId: 74d38f4c-947b-46c0-8e5f-b680ffe97395 + packageName: mh-local-ui102413-1.0.1.6f995268.mda + branch: main + revision: 6f995268 + modelVersion: 1.0.1.6f995268 + runtimeVersion: 10.24.13.86719 + status: Success + locked: false + createdBy: muhong00 + dateCreated: 2026-05-28T03:19:39.244Z + + BuildResponse: + description: App build job + content: + application/json: + schema: + $ref: '#/components/schemas/BuildJob' + examples: + Build Response: + value: + packageId: 36279c9b-9b5a-4599-b548-7fe09d792f76 + pipelineId: 179862510118532184 + message: Request accepted, build app package started + + securitySchemes: + basicAuth: + type: http + scheme: basic + mxtoken: + type: apiKey + name: Authorization + in: header +security: + - basicAuth: [] + - mxtoken: [] +tags: + - name: apps + description: 'For build, retrive, lock, unlock and download app packages and sbom files' diff --git a/static/openapi-spec/openapi-deploy-v1.yaml b/static/openapi-spec/openapi-deploy-v1.yaml new file mode 100644 index 00000000000..6cb5a89c474 --- /dev/null +++ b/static/openapi-spec/openapi-deploy-v1.yaml @@ -0,0 +1,1775 @@ +openapi: 3.0.1 +info: + title: Deploy Service v1 + description: "The deploy service API is for creating and managing app environment resources for app package deployment. \r\n" + version: 1.0.0 +servers: + - url: https://pmp-demo.privateplatform.mendix.com/deployservice/v1 +paths: + /apps/{appId}/environments: + post: + tags: + - apps + summary: 'Create a new environment for app' + description: 'Create a new environment with specified configuration and resources for specified app.' + operationId: createEnvironment + parameters: + - name: appId + in: path + description: App Id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EnvironmentCreateRequest' + examples: + Create environment with Core Resource Size (Connected and Standalone mode): + value: + displayName: Project-A-Env + clusterName: eks-test + namespace: ns-test + storagePlanName: bk-plan + databasePlanName: db-plan + deploymentPurpose: Development + deploymentPackageName: e2e-app-deploy-portunus-146465ba.mda + coreResourceSize: Small + Create environment with Core Resource Plan (Connected mode only): + value: + displayName: Project-A-Env + clusterName: eks-connected + namespace: ns-connected + storagePlanName: bk-plan + databasePlanName: db-plan + deploymentPurpose: Development + deploymentPackageName: e2e-app-deploy-portunus-146465ba.mda + coreResourcePlan: low-level + + responses: + '202': + $ref: '#/components/responses/AsyncOperationResponse' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + get: + tags: + - apps + summary: 'Retrieve all environments for app' + description: 'Get all Standalone environments when platform in Standalone mode; Get all Connected environments when platform in Connected mode.' + operationId: getEnvironments + parameters: + - name: appId + in: path + description: App Id + required: true + schema: + type: string + responses: + '200': + $ref: '#/components/responses/Environments' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + /apps/{appId}/environments/{environmentId}: + get: + tags: + - apps + summary: 'Retrieve a specified environment for app' + description: 'Retrieve information and status of a specified environment for specified app.' + operationId: getEnvironment + parameters: + - name: appId + in: path + description: App Id + required: true + schema: + type: string + - name: environmentId + in: path + description: Environment id + required: true + schema: + type: string + responses: + '200': + $ref: '#/components/responses/Environment' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + delete: + tags: + - apps + summary: 'Delete a specified environment for app' + description: 'Delete a specified environment for specified app.' + operationId: deleteEnvironment + parameters: + - name: appId + in: path + description: App Id + required: true + schema: + type: string + - name: environmentId + in: path + description: Environment id + required: true + schema: + type: string + responses: + '204': + description: Delete environment successfully, no content in response body + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + + /apps/{appId}/environments/{environmentId}/configurations: + patch: + tags: + - apps + summary: Update configuration of a specified environment + description: >- + Update configuration and settings of a specified environment for + specified app. + operationId: updateConfigurations + parameters: + - name: appId + in: path + description: App Id + required: true + schema: + type: string + - name: environmentId + in: path + description: Environment id + required: true + schema: + type: string + + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ConfigurationPatchRequest' + examples: + Request to change some configurations: + value: + displayName: Project-A-Env + replicas: 1 + appUrl: https://project-a-env.portunus.mxplatform.net/ + leaderlessMode: true + + Request to change admin password: + value: + adminPassword: Project-A-Env + + Request to change Environment Constants: + value: + Constants: + - name: const1 + newValue: xyz + + Request to enable Scheduled Events: + value: + ScheduledEvents: + - name: event1 + newEnabled: true + + Request to change Http Headers: + value: + CustomHttpHeaders: + - header: key1 + newValue: val1 + + Request to change Environment Variables: + value: + CustomEnvironmentVariables: + - name: cev1 + newValue: "12345" + - name: cev2 + newValue: abcdef + + Request to change Runtime Settings: + value: + CustomRuntimeSettings: + - name: crs1 + newValue: "789" + - name: crs2 + newValue: xyz + + Request to change JVM and Jetty options: + value: + CustomJVMOptions: + name: JAVA_TOOL_OPTIONS + newValue: "-Xmx512m -Xms256m" + CustomJettyOptions: + name: jettyOptions + newValue: "{\n\t\"k1\": \"v1\",\n\t\"k3\": \"v3\"\n}" + + Request to change Debugger and Log Levels: + value: + Debugger: + enabled: true + password: "[Password for connect debugger]" + LogLevels: + - node: LogEnv + level: INFO + + Request to Add New Client Certificates: + value: + ClientCertificates: + - newEnabled: true + password: "[Password for import client certificate file]" + base64pfxCertFileContent: "[base64 encoded content of pfx format certificate file]" + + Request to Add Web Service for Client Certificates: + value: + ClientCertificates: + - id: 960 + CertificateServices: + - webServiceName: wsService1 + + Request to disable Client Certificates: + value: + ClientCertificates: + - id: 960 + newEnabled: false + + Request to Use Existed Secret for TLS Config: + value: + CustomTLSConfig: + enableTLS: true + tlsConfig: TlsCustom + useExistingSecret: UseExistedSecret + secretName: tls-secret + + Request to Add New Key Certificate for TLS Config: + value: + CustomTLSConfig: + enableTLS: true + tlsConfig: TlsCustom + useExistingSecret: AddNewKeyCertificate + tlsCertificate: "[base64 encoded content of tls Certificate file]" + tlsPrivateKey: "[base64 encoded content of tls Private Key file]" + + Request to change Core Resource: + value: + CoreResource: + coreResourceSize: Custom + cpuRequest: 0.1 + cpuLimit: 1 + memRequest: 0.512 + memLimit: 1 + ephemeralRequest: 10 + ephemeralLimit: 20 + + responses: + '200': + $ref: '#/components/responses/Environment' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + delete: + tags: + - apps + summary: Delete configuration and settings of a specified environment + description: >- + Delete configuration and settings of a specified environment for + specified app. + operationId: deleteConfigurations + parameters: + - name: appId + in: path + description: App Id + required: true + schema: + type: string + - name: environmentId + in: path + description: Environment id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ConfigurationDeleteRequest' + examples: + Request to delete Environment Variables: + value: + CustomEnvironmentVariables: + - name: cev1 + - name: cev2 + Request to delete Runtime Settings: + value: + CustomRuntimeSettings: + - name: crs1 + - name: crs2 + Request to delete Http Headers: + value: + CustomHttpHeaders: + - header: hd1 + - header: hd2 + Request to delete Log Levels: + value: + LogLevels: + - node: nd1 + - node: nd2 + Request to delete Web Service of Client Certificates: + value: + ClientCertificates: + - id: 7634128901 + CertificateServices: + - webServiceName: wsService1 + - webServiceName: wsService2 + Request to delete Client Certificates: + value: + ClientCertificates: + - id: 7634128901 + + responses: + '204': + description: Delete environment configurations successfully, no content in response body + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + /apps/{appId}/environments/{environmentId}/request: + post: + tags: + - apps + summary: Deploy package or apply change for a specified environmen + description: >- + Deploy package or apply change or start/stop/restart a specified + environmen for specified app. + operationId: requestActionOnAppInEnv + parameters: + - name: appId + in: path + description: App Id + required: true + schema: + type: string + - name: environmentId + in: path + description: Environment id + required: true + schema: + type: string + - name: action + in: query + description: Deploy package, apply config or start/stop/restart app in the environmen + schema: + enum: + - ApplyConfig + - Deploy + - Start + - Stop + - Restart + type: string + - name: packageId + in: query + description: Package id + schema: + type: string + responses: + '202': + $ref: '#/components/responses/AsyncOperationResponse' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + /apps/{appId}/dashboard: + get: + tags: + - apps + summary: Get app dashboard include all environments + description: Get app dashboard include all environments created in both Standalone and Connected mode + operationId: getAppDashboard + parameters: + - name: appId + in: path + description: App Id + required: true + schema: + type: string + responses: + '200': + $ref: '#/components/responses/Dashboards' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + +components: + parameters: + appId: + name: appId + in: path + description: App id + required: true + schema: + type: string + example: e48b3e22-d6ad-4c81-aa5e-603776d22b4d + environmentId: + name: environmentId + in: path + description: Environment id + required: true + schema: + type: string + example: eynu0q2x + + responses: + error-401: + description: Authentication information is missing or invalid + content: + application/json: + schema: + $ref: '#/components/schemas/error' + examples: + 401 - Unauthorized: + value: + status: 401 + title: Unauthorized + detail: Authentication information missing or invalid + error-400: + description: Invalid input parameter or request body + content: + application/json: + schema: + $ref: '#/components/schemas/error' + examples: + 400 - Invalid environment info: + value: + status: 400 + title: Bad Request + detail: Invalid parameters + invalid-params: + - name: displayName + reason: Invalid environment display name + - name: databasePlanName + reason: Invalid database plan name + 400 - Invalid cluster info: + value: + status: 400 + title: Bad Request + detail: Invalid parameters + invalid-params: + - name: clusterName + reason: Incorrect cluster name + - name: namespace + reason: Invalid namespace + error-403: + description: User has no permission for this operation + content: + application/json: + schema: + $ref: '#/components/schemas/error' + examples: + 403 - Forbidden: + value: + status: 403 + title: Forbidden + detail: User has no permission for this operation + error-404: + description: Resource not found + content: + application/json: + schema: + $ref: '#/components/schemas/error' + examples: + 404 - Environment not found: + value: + status: 404 + title: Not Found + detail: Environment not found + + AsyncOperationResponse: + description: Response for async operations include create environment, deploy, apply config, start, stop and restart app. + content: + application/json: + schema: + $ref: '#/components/schemas/AsyncOperationResponse' + examples: + Response from operation - Deploy: + value: + environmentId: l48bv05l + pipelineId: 179862510118532184 + message: Request accepted, starting to deploy app package into environment + Response from operation - ApplyConfig: + value: + environmentId: l48bv05l + pipelineId: 179862510118532185 + message: Request accepted, starting to apply environment configurations + Response from operation - Start: + value: + environmentId: l48bv05l + pipelineId: 179862510118532186 + message: Request accepted, starting environment app + Response from operation - Stop: + value: + environmentId: l48bv05l + pipelineId: 179862510118532187 + message: Request accepted, stopping environment app + Response from operation - Restart: + value: + environmentId: l48bv05l + pipelineId: 179862510118532188 + message: Request accepted, restarting environment app + + Environment: + description: Environment detail information + content: + application/json: + schema: + $ref: '#/components/schemas/Environment' + examples: + Environment: + value: + environmentId: l48bv05l + internalName: l48bv05l + displayName: Project-A-Env + clusterName: eks-test + namespace: "test-ns" + storagePlanName: "bk-plan" + databasePlanName: "db-plan" + deploymentPurpose: Development + dtapMode: Development + appName: "E2E-App-Deploy-Portunus" + appUrl: "https://l48bv05l.portunus.mxplatform.net/" + status: Ready + readyReplicas: 1 + replicas: 1 + isAppStopped: false + isManualDeploy: false + leaderlessMode: false + buildStatus: Ready + runtimeStatus: Ready + networkStatus: Ready + databaseStatus: Ready + storageStatus: Ready + licenseStatus: Licensed + creationStatus: Created + resourceStatus: Ready + runtimeVersion: "11.6.2" + lastStartTime: "2026-04-14T18:17:10.666Z" + runtimeExplanation: "master: MinimumReplicasAvailable" + buildExplanation: "Build succeeded" + storageExplanation: "Successfully created secret" + + Packages: + packageName: mh-local-ui102413-5e6a49a5.mda + status: Success + locked: true + packageId: a957ec90-0fb3-4c9a-ace9-89d0fd4f6c2f + branch: main + revision: 5e6a49a5 + modelVersion: 5e6a49a5 + runtimeVersion: 10.24.13.86719 + createdBy: muhong00 + createdTime: 2026-01-07T04:35:57.378Z + + Constants: + - name: const1 + currentValue: "1234" + newValue: "12345" + ScheduledEvents: + - name: event1 + currentEnabled: false + newEnabled: true + CustomHttpHeaders: + - name: head1 + currentValue: val1 + newValue: val2 + CustomEnvironmentVariables: + - name: var1 + currentValue: abcde + newValue: abcdef + CustomRuntimeSettings: + - name: set1 + currentValue: "789" + newValue: "7890" + + CustomJVMOptions: + name: JAVA_TOOL_OPTIONS + currentValue: "-Xmx512m -Xms256m" + newValue: "-Xmx512m -Xms512m" + CustomJettyOptions: + name: jettyOptions + currentValue: "{\n\t\"k1\": \"v1\",\n\t\"k3\": \"v3\"\n}" + newValue: "{\n\t\"k2\": \"v2\",\n\t\"k4\": \"v4\"\n}" + Debugger: + enabled: true + url: "https://l48bv05l.portunus.mxplatform.net/debugger/" + LogLevels: + - node: LogApp + level: INFO + + ClientCertificates: + - id: 960 + subject: my-tls-client + issuer: mx-tls-client + validFrom: 2026-06-02T08:27:49.000Z + validTo: 2027-06-02T08:27:49.000Z + currentEnabled: false + newEnabled: true + CertificateServices: + - webServiceName: wsService1 + + CustomTLSConfig: + enableTLS: true + tlsConfig: TlsCustom + useExistingSecret: UseExistedSecret + secretName: tls-secret + CoreResource: + coreResourcePlan: "low-level" + cpuRequest: 0.1 + cpuLimit: 1 + memRequest: 0.512 + memLimit: 1 + ephemeralRequest: 10 + ephemeralLimit: 20 + + Environments: + description: Environment detail list + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Environment' + examples: + Environments: + value: + - environmentId: l48bv05l + internalName: l48bv05l + displayName: Project-A-Env + clusterName: eks-test + namespace: "test-ns" + storagePlanName: "bk-plan" + databasePlanName: "db-plan" + deploymentPurpose: Development + dtapMode: Development + appName: "E2E-App-Deploy-Portunus" + appUrl: "https://l48bv05l.portunus.mxplatform.net/" + status: Ready + readyReplicas: 1 + replicas: 1 + isAppStopped: false + isManualDeploy: false + leaderlessMode: false + buildStatus: Ready + runtimeStatus: Ready + networkStatus: Ready + databaseStatus: Ready + storageStatus: Ready + licenseStatus: Licensed + creationStatus: Created + resourceStatus: Ready + runtimeVersion: "11.6.2" + lastStartTime: "2026-04-14T18:17:10.666Z" + runtimeExplanation: "master: MinimumReplicasAvailable" + buildExplanation: "Build succeeded" + storageExplanation: "Successfully created secret" + + Packages: + packageName: mh-local-ui102413-5e6a49a5.mda + status: Success + locked: true + packageId: a957ec90-0fb3-4c9a-ace9-89d0fd4f6c2f + branch: main + revision: 5e6a49a5 + modelVersion: 5e6a49a5 + runtimeVersion: 10.24.13.86719 + createdBy: muhong00 + createdTime: 2026-01-07T04:35:57.378Z + + Constants: + - name: const1 + currentValue: "1234" + newValue: "12345" + ScheduledEvents: + - name: event1 + currentEnabled: false + newEnabled: true + CustomHttpHeaders: + - name: head1 + currentValue: val1 + newValue: val2 + CustomEnvironmentVariables: + - name: var1 + currentValue: abcde + newValue: abcdef + CustomRuntimeSettings: + - name: set1 + currentValue: "789" + newValue: "7890" + + CustomJVMOptions: + name: JAVA_TOOL_OPTIONS + currentValue: "-Xmx512m -Xms256m" + newValue: "-Xmx512m -Xms512m" + CustomJettyOptions: + name: jettyOptions + currentValue: "{\n\t\"k1\": \"v1\",\n\t\"k3\": \"v3\"\n}" + newValue: "{\n\t\"k2\": \"v2\",\n\t\"k4\": \"v4\"\n}" + Debugger: + enabled: true + url: "https://l48bv05l.portunus.mxplatform.net/debugger/" + LogLevels: + - node: LogApp + level: INFO + + ClientCertificates: + - id: 960 + subject: my-tls-client + issuer: mx-tls-client + validFrom: 2026-06-02T08:27:49.000Z + validTo: 2027-06-02T08:27:49.000Z + currentEnabled: false + newEnabled: true + CertificateServices: + - webServiceName: wsService1 + + CustomTLSConfig: + enableTLS: true + tlsConfig: TlsCustom + useExistingSecret: UseExistedSecret + secretName: tls-secret + + CoreResource: + coreResourcePlan: "low-level" + cpuRequest: 0.1 + cpuLimit: 1 + memRequest: 0.512 + memLimit: 1 + ephemeralRequest: 10 + ephemeralLimit: 20 + + Dashboards: + description: App environment dashboard + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Dashboard' + examples: + App environment dashboard: + value: + - environmentId: l48bv05l + clusterName: eks-test + namespace: "test-ns" + storagePlanName: "bk-plan" + databasePlanName: "db-plan" + deploymentPurpose: Development + dtapMode: Development + appId: 0521a37c-77f3-4607-94e9-e64a32311833 + appName: E2E-App-Deploy-Portunus + appUrl: "https://l48bv05l.portunus.mxplatform.net/" + status: Ready + readyReplicas: 1 + replicas: 1 + isAppStopped: false + isManualDeploy: false + leaderlessMode: false + buildStatus: Ready + runtimeStatus: Ready + networkStatus: Ready + databaseStatus: Ready + storageStatus: Ready + licenseStatus: Licensed + creationStatus: Created + resourceStatus: Ready + runtimeVersion: "11.6.2" + lastStartTime: "2026-04-14T18:17:10.666Z" + runtimeExplanation: "master: MinimumReplicasAvailable" + buildExplanation: "Build succeeded" + storageExplanation: "Successfully created secret" + + CoreResource: + coreResourceSize: "Small" + cpuRequest: 0.1 + cpuLimit: 1 + memRequest: 0.512 + memLimit: 1 + ephemeralRequest: 10 + ephemeralLimit: 20 + + schemas: + EnvironmentCreateRequest: + title: EnvironmentCreateRequest + description: Request to create a new environment. + type: object + properties: + displayName: + type: string + description: Display name of the environment + example: Env-Dev + clusterName: + type: string + description: Cluster name where the environment will be deployed + example: cluster-dev + namespace: + type: string + description: Namespace for the environment + example: namespace-dev + storagePlanName: + type: string + description: Name of the storage plan for the environment + example: storage-dev + databasePlanName: + type: string + description: Name of the database plan for the environment + example: database-dev + deploymentPackageName: + type: string + description: Name of the package for the deployment + example: mh-local-ui102413-5e6a49a5.mda + deploymentPurpose: + enum: + - Development + - Test + - Acceptance + - Production + type: string + description: Purpose for the deployment + example: Development + coreResourcePlan: + type: string + description: Core Resource Plan for environment creation, it's only for connected mode. + example: low-level + coreResourceSize: + enum: + - Small + - Medium + - Large + # - Custom + type: string + description: "Core Resource Size for environment, not support Custom Size for environment creation. If need, please use PATCH API to config Custom Size after environment created." + default: Small + required: + - displayName + - clusterName + - namespace + - storagePlanName + - databasePlanName + - deploymentPackageName + - deploymentPurpose + + ConfigurationPatchRequest: + title: ConfigurationPatchRequest + description: Request to change environment configurations and settings + type: object + properties: + displayName: + type: string + description: Display name of the environment + example: Env-Dev + dtapMode: + type: string + description: DTAP mode of the environment can be Development or Production + example: Development + replicas: + type: integer + description: Replicas of the environment + example: 1 + appUrl: + type: string + description: URL of the app deployed in the environment + example: "https://project-a-env.portunus.mxplatform.net/" + adminPassword: + type: string + description: Admin password of the app deployed in the environment + example: "[MxAdminPassword]" + leaderlessMode: + type: boolean + description: Indicate if the environment is in leaderless mode + example: false + + Constants: + description: Constants of the app deployed in the environment + type: array + items: + title: Constants + type: object + properties: + name: + type: string + newValue: + type: string + + ScheduledEvents: + description: Scheduled events of the app deployed in the environment + type: array + items: + title: ScheduledEvents + type: object + properties: + name: + type: string + newEnabled: + type: boolean + + CustomEnvironmentVariables: + description: Variables of the app deployed in the environment + type: array + items: + title: CustomEnvironmentVariable + type: object + properties: + name: + type: string + newValue: + type: string + + CustomRuntimeSettings: + description: Runtime settings of the app deployed in the environment + type: array + items: + title: CustomRuntimeSetting + type: object + properties: + name: + type: string + newValue: + type: string + + CustomHttpHeaders: + description: HTTP headers of the environment network + type: array + items: + title: CustomHttpHeaders + type: object + properties: + header: + type: string + newValue: + type: string + + CustomJVMOptions: + description: JVM options of the environment model + title: CustomJVMOptions + type: object + properties: + newValue: + type: string + + CustomJettyOptions: + description: Jetty options of the environment model + title: CustomJettyOptions + type: object + properties: + name: + type: string + newValue: + type: string + + Debugger: + description: Debugger of the app deployed in the environment + title: Debugger + type: object + properties: + enabled: + type: boolean + password: + type: string + + LogLevels: + description: Log levels of the environment + type: array + items: + title: LogLevels + type: object + properties: + node: + type: string + level: + enum: + - CRITICAL + - ERROR + - WARNING + - INFO + - DEBUG + - TRACE + type: string + + ClientCertificates: + description: Client certificates of the environment network + type: array + items: + title: ClientCertificates + type: object + properties: + base64pfxCertFileContent: + type: string + password: + type: string + newEnabled: + type: boolean + + CustomTLSConfig: + description: TLS configuration of the environment network + title: CustomTLSConfig + type: object + properties: + enableTLS: + type: boolean + default: false + tlsConfig: + enum: + - TlsDefault + - TlsCustom + type: string + secretName: + type: string + tlsCertificate: + type: string + tlsPrivateKey: + type: string + useExistingSecret: + enum: + - UseExistedSecret + - AddNewKeyCertificate + type: string + + CoreResource: + description: Core resource of the environment + title: CoreResource + type: object + properties: + coreResourcePlan: + type: string + description: Core Resource Plan for environment, it's only for Connected mode. + coreResourceSize: + enum: + - Small + - Medium + - Large + - Custom + type: string + description: Core Resource Size for environment, it's for both Connected and Standalone modes. + cpuRequest: + type: number + description: 'Cpu cores request should not be lower than 0.1 CPU' + cpuLimit: + type: number + description: 'Cpu cores limit should not be lower than 0.1 CPU' + memRequest: + type: number + description: 'Memory request should not be lower than 0.512 GB' + memLimit: + type: number + description: 'Memory limit should not be lower than 0.512 GB' + ephemeralRequest: + type: number + description: 'Ephemeral Storage request should not be lower than 1 GB' + ephemeralLimit: + type: number + description: 'Ephemeral storage limit should not be lower than 1 GB' + + ConfigurationDeleteRequest: + title: ConfigurationDeleteRequest + description: Request to delete environment configurations and settings + type: object + properties: + CustomEnvironmentVariables: + description: Variables of the app deployed in the environment + type: array + items: + title: CustomEnvironmentVariable + type: object + properties: + name: + type: string + + CustomRuntimeSettings: + description: Runtime settings of the app deployed in the environment + type: array + items: + title: CustomRuntimeSetting + type: object + properties: + name: + type: string + + CustomHttpHeaders: + description: HTTP headers of the environment network + type: array + items: + title: CustomHttpHeaders + type: object + properties: + header: + type: string + + LogLevels: + description: Log levels of the environment + type: array + items: + title: LogLevels + type: object + properties: + node: + type: string + + ClientCertificates: + description: Client certificates of the environment network + type: array + items: + title: ClientCertificates + type: object + properties: + id: + type: integer + + + AsyncOperationResponse: + description: Response for async operations include create environment, deploy, apply config, start, stop and restart app. + type: object + properties: + environmentId: + type: string + description: Environment id + example: j60vwiju + pipelineId: + type: integer + description: Deploy pipeline id + example: 179862510118532184 + message: + type: string + description: operations message + example: Request accepted, deploy app package started + + Environment: + title: Environment + description: Environment detail configurations and information. + type: object + properties: + environmentId: + type: string + description: Environment id + example: eynu0q2x + internalName: + type: string + description: Internal name of the environment + example: eynu0q2x + displayName: + type: string + description: Display name of the environment + example: Env-Dev + clusterName: + type: string + description: Name of the cluster for the environment created + example: test-cluster + namespace: + type: string + description: Cluster namespace for the environment created + example: test-namespace + storagePlanName: + type: string + description: Name of the storage plan for the environment + example: test-storage-plan + databasePlanName: + type: string + description: Name of the database plan for the environment + example: test-database-plan + deploymentPurpose: + enum: + - Development + - Test + - Acceptance + - Production + type: string + description: Purpose of the deployment + example: Development + dtapMode: + type: string + description: DTAP mode of the environment can be Development or Production + example: Development + appName: + type: string + description: Name of the application + example: MyApp + appUrl: + type: string + description: URL of the application + example: https://myapp.example.com + status: + enum: + - Init + - Waiting + - Building + - Processing + - Success + - Ready + - Failed + - Unknown + type: string + description: Status of the environment + example: Success + readyReplicas: + type: integer + description: Number of ready replicas for the environment + example: 2 + replicas: + type: integer + description: Total number of replicas for the environment + example: 3 + isAppStopped: + type: boolean + description: Indicates if the application is stopped + example: false + isManualDeploy: + type: boolean + description: Indicates if the deployment was manual + example: true + leaderlessMode: + type: boolean + description: Indicates if the environment was leaderless mode + example: true + buildStatus: + type: string + description: Status of the build process + example: Processing + runtimeStatus: + type: string + description: Status of the runtime environment + example: Ready + networkStatus: + type: string + description: Status of the network configuration + example: Ready + databaseStatus: + type: string + description: Status of the database connection + example: Ready + storageStatus: + type: string + description: Status of the storage configuration + example: Ready + licenseStatus: + type: string + description: Status of the license + example: Licensed + creationStatus: + type: string + description: Status of the creation process + example: Completed + resourceStatus: + type: string + description: Status of the resources + example: Allocated + runtimeVersion: + type: string + description: Version of the runtime environment + example: 1.0.0 + lastStartTime: + type: string + description: Timestamp of the last start time + example: 2023-10-01T12:00:00Z + buildExplanation: + type: string + description: Explanation for the build process + example: Build completed successfully + storageExplanation: + type: string + description: Explanation for the storage configuration + example: Storage is available and properly configured + runtimeExplanation: + type: string + description: Explanation for the runtime environment + example: Runtime environment is running correctly + + Packages: + description: App package deployed in the environment + type: object + properties: + packageId: + type: string + description: Package id + example: a957ec90-0fb3-4c9a-ace9-89d0fd4f6c2f + packageName: + type: string + description: Package name + example: mh-local-ui102413-5e6a49a5.mda + status: + type: string + description: Package status + example: Success + locked: + type: boolean + description: Indicates if the package is locked + example: false + branch: + type: string + description: The branch to which the package built from + example: main + revision: + type: string + description: The revision to which the package built from + example: 5e6a49a5 + modelVersion: + type: string + description: The model version of the package + example: 5e6a49a5 + runtimeVersion: + type: string + description: The runtime version required by the package + example: 10.24.13.86719 + createdBy: + type: string + description: The user who created the package + example: John + createdTime: + type: string + description: The timestamp when the package was created + example: 2026-01-07T04:35:57.378Z + + Constants: + description: Constants of the app deployed in the environment + type: array + items: + title: Constants + type: object + properties: + name: + type: string + currentValue: + type: string + newValue: + type: string + + ScheduledEvents: + description: Scheduled events of the app deployed in the environment + type: array + items: + title: ScheduledEvents + type: object + properties: + name: + type: string + currentEnabled: + type: boolean + newEnabled: + type: boolean + + CustomEnvironmentVariables: + type: array + items: + type: object + properties: + name: + type: string + description: The name of the environment variable + currentValue: + type: string + newValue: + type: string + description: The value of the environment variable + + CustomRuntimeSettings: + type: array + items: + type: object + properties: + name: + type: string + description: The name of the runtime setting + currentValue: + type: string + newValue: + type: string + description: The value of the runtime setting + + CustomJVMOptions: + type: object + properties: + name: + type: string + description: The name of the JVM option + currentValue: + type: string + newValue: + type: string + description: The value of the JVM option + + CustomJettyOptions: + type: object + properties: + name: + type: string + description: The name of the Jetty option + currentValue: + type: string + newValue: + type: string + description: The value of the Jetty option + + Debugger: + type: object + properties: + enabled: + type: boolean + url: + type: string + description: The URL for accessing the debugger + + LogLevels: + description: Log levels of the environment + type: array + items: + type: object + properties: + node: + type: string + description: The node for which the log level is set + level: + type: string + description: The log level for the specified node + + ClientCertificates: + description: Client certificates of the environment network + type: array + items: + title: ClientCertificates + type: object + properties: + id: + type: integer + issuer: + type: string + subject: + type: string + validFrom: + type: string + validTo: + type: string + currentEnabled: + type: boolean + newEnabled: + type: boolean + + CustomTLSConfig: + description: TLS configuration of the environment network + type: object + properties: + enableTLS: + type: boolean + description: Whether to enable TLS for the environment + tlsConfig: + type: string + description: The TLS configuration for the environment + useExistingSecret: + type: string + description: The name of the existing secret for TLS configuration + + CoreResource: + description: Core resource of the environment + type: object + properties: + coreResourcePlan: + type: string + description: The core resource plan for the environment + coreResourceSize: + enum: + - Small + - Medium + - Large + - Custom + type: string + description: The size of the core resources for the environment + cpuRequest: + type: number + description: The CPU request for the environment + cpuLimit: + type: number + description: The CPU limit for the environment + memRequest: + type: number + description: The memory request for the environment + memLimit: + type: number + description: The memory limit for the environment + ephemeralRequest: + type: number + description: The ephemeral storage request for the environment + ephemeralLimit: + type: number + description: The ephemeral storage limit for the environment + + Dashboard: + title: Dashboard + description: App environment dashboard information. + type: object + properties: + environmentId: + type: string + description: Environment id + example: eynu0q2x + clusterName: + type: string + description: Name of the cluster for the environment created + example: test-cluster + namespace: + type: string + description: Cluster namespace for the environment created + example: test-namespace + storagePlanName: + type: string + description: Name of the storage plan for the environment + example: test-storage-plan + databasePlanName: + type: string + description: Name of the database plan for the environment + example: test-database-plan + deploymentPurpose: + enum: + - Development + - Test + - Acceptance + - Production + type: string + description: Purpose of the deployment + example: Development + dtapMode: + type: string + description: DTAP mode of the environment can be Development or Production + example: Development + appId: + type: string + description: Id of the application + example: 0521a37c-77f3-4607-94e9-e64a32311833 + appName: + type: string + description: Name of the application + example: MyApp + appUrl: + type: string + description: URL of the application + example: https://myapp.example.com + status: + enum: + - Init + - Waiting + - Building + - Processing + - Success + - Ready + - Failed + - Unknown + type: string + description: Status of the environment + example: Success + readyReplicas: + type: integer + description: Number of ready replicas for the environment + example: 2 + replicas: + type: integer + description: Total number of replicas for the environment + example: 3 + # isAppStopped: + # type: boolean + # description: Indicates if the application is stopped + # example: false + # isManualDeploy: + # type: boolean + # description: Indicates if the deployment was manual + # example: true + buildStatus: + type: string + description: Status of the build process + example: Processing + runtimeStatus: + type: string + description: Status of the runtime environment + example: Ready + networkStatus: + type: string + description: Status of the network configuration + example: Ready + databaseStatus: + type: string + description: Status of the database connection + example: Ready + storageStatus: + type: string + description: Status of the storage configuration + example: Ready + licenseStatus: + type: string + description: Status of the license + example: Licensed + creationStatus: + type: string + description: Status of the creation process + example: Completed + resourceStatus: + type: string + description: Status of the resources + example: Allocated + runtimeVersion: + type: string + description: Version of the runtime environment + example: 1.0.0 + + deployedBy: + type: string + description: Timestamp of the last start time + example: Peter + + uptime: + type: string + description: Timestamp of the last start time + example: "0 min" + + uptimeChanged: + type: string + description: Timestamp of the last start time + example: "2023-10-01T12:00:00Z" + + createdDate: + type: string + description: Timestamp of the last start time + example: "2023-10-01T12:00:00Z" + + buildExplanation: + type: string + description: Explanation for the build process + example: Build completed successfully + storageExplanation: + type: string + description: Explanation for the storage configuration + example: Storage is available and properly configured + runtimeExplanation: + type: string + description: Explanation for the runtime environment + example: Runtime environment is running correctly + + CoreResource: + description: Core resource of the environment + type: object + properties: + coreResourceSize: + enum: + - Small + - Medium + - Large + - Custom + type: string + description: The size of the core resources for the environment + cpuRequest: + type: number + description: The CPU request for the environment + cpuLimit: + type: number + description: The CPU limit for the environment + memRequest: + type: number + description: The memory request for the environment + memLimit: + type: number + description: The memory limit for the environment + ephemeralRequest: + type: number + description: The ephemeral storage request for the environment + ephemeralLimit: + type: number + description: The ephemeral storage limit for the environment + + error: + type: object + description: Error response + properties: + status: + type: integer + description: Response status code. + example: 400 + title: + type: string + description: 'A short, human-readable summary of the problem type.' + example: Bad Request + detail: + type: string + description: A human-readable explanation specific to this occurrence of the problem. + example: Invalid parameters + invalid-params: + type: array + description: "(Optional) JSON list List of name, reason keys for invalid attribute values.\r\n" + items: + type: object + properties: + name: + type: string + description: "Parameter name.\r\n" + example: appId + reason: + type: string + description: "Reason for error.\r\n" + example: App id can not be empty + required: + - status + - title + - detail + + securitySchemes: + basicAuth: + type: http + scheme: basic + mxtoken: + type: apiKey + name: Authorization + in: header +security: + - basicAuth: [] + - mxtoken: [] +tags: + - name: apps + description: 'For creating, managing app environment resources and deploy app package' diff --git a/static/openapi-spec/openapi-deploy.yaml b/static/openapi-spec/openapi-deploy.yaml deleted file mode 100644 index eb216900941..00000000000 --- a/static/openapi-spec/openapi-deploy.yaml +++ /dev/null @@ -1,1091 +0,0 @@ -openapi: 3.0.1 -info: - title: Deploy Service v1 - description: "The deploy service API is for creating and managing app environment resources for app package deployment. \r\n" - version: 1.0.0 -servers: - - url: https://pmp-dev-sgp.mxplatform.net/deployservice/v1 -paths: - /apps/{appId}/environments: - post: - tags: - - apps - summary: 'Create a new environment for the application' - description: 'Create a new environment with the specified configuration and resources for the specified application.' - parameters: - - name: appId - in: path - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/EnvironmentRequestNew' - examples: - Input environment information: - value: - displayName: Project-A-Env - clusterName: eks-test - namespace: test-ns - storagePlanName: bk-plan - databasePlanName: db-plan - deploymentPurpose: Development - deploymentPackageName: e2e-app-deploy-portunus-146465ba.mda - coreResourcePlan: low-level - responses: - '200': - $ref: '#/components/responses/Environment' - '400': - $ref: '#/components/responses/error-400' - '401': - $ref: '#/components/responses/error-401' - '404': - $ref: '#/components/responses/error-404' - get: - tags: - - apps - summary: 'Retrieve all environments for the application' - description: 'Retrieve information and status of all existing environments for the specified application.' - parameters: - - name: appId - in: path - required: true - schema: - type: string - responses: - '200': - $ref: '#/components/responses/Environments' - '400': - $ref: '#/components/responses/error-400' - '401': - $ref: '#/components/responses/error-401' - '404': - $ref: '#/components/responses/error-404' - /apps/{appId}/environments/{environmentID}: - get: - tags: - - apps - summary: 'Retrieve a specified environment for the application' - description: 'Retrieve information and status of a specified environment for the application.' - parameters: - - name: appId - in: path - required: true - schema: - type: string - - name: environmentID - in: path - required: true - schema: - type: string - responses: - '200': - $ref: '#/components/responses/Environment' - '400': - $ref: '#/components/responses/error-400' - '401': - $ref: '#/components/responses/error-401' - '404': - $ref: '#/components/responses/error-404' - patch: - tags: - - apps - summary: 'Update a specified environment for the application' - description: 'Update configuration and settings of a specified environment for the application.' - parameters: - - name: appId - in: path - required: true - schema: - type: string - - name: environmentID - in: path - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/EnvironmentRequestPatch' - examples: - Input environment information: - value: - displayName: Project-A-Env - replicas: 1 - appUrl: https://project-a-env.portunus.mxplatform.net/ - CustomEnvironmentVariables: - - name: cev1 - value: 12345 - - name: cev2 - value: abcdef - CustomRuntimeSettings: - - name: crs1 - value: 789 - - name: crs2 - value: xyz - CustomJVMOptions: - name: JAVA_TOOL_OPTIONS - value: "-Xmx512m -Xms256m" - CustomJettyOptions: - name: jettyOptions - value: "{\n\t\"k1\": \"v1\",\n\t\"k3\": \"v3\"\n}" - Debugger: - password: debugPassword123! - LogLevels: - - node: LogEnv - level: INFO - CustomTLSConfig: - enableTLS: true - tlsConfig: TlsCustom - useExistingSecret: UseExistedSecret - secretName: tls-secret - CoreResource: - coreResourceSize: Custom - cpuRequest: 0.1 - cpuLimit: 1 - memRequest: 0.512 - memLimit: 1 - ephemeralRequest: 10 - ephemeralLimit: 20 - responses: - '200': - $ref: '#/components/responses/Environment' - '400': - $ref: '#/components/responses/error-400' - '401': - $ref: '#/components/responses/error-401' - delete: - tags: - - apps - summary: 'Delete a specified environment for the application' - description: 'Delete a specified environment for the application.' - parameters: - - name: appId - in: path - required: true - schema: - type: string - - name: environmentID - in: path - required: true - schema: - type: string - responses: - '200': - description: successful operation - '401': - $ref: '#/components/responses/error-401' -components: - parameters: - appId: - name: appId - in: path - description: Application ID - required: true - schema: - type: string - example: e48b3e22-d6ad-4c81-aa5e-603776d22b4d - environmentID: - name: environmentID - in: path - description: Environment ID - required: true - schema: - type: string - example: eynu0q2x - responses: - error-401: - description: Authentication information is missing or invalid - content: - application/json: - schema: - $ref: '#/components/schemas/error' - examples: - 401 - Unauthorized: - value: - status: 401 - title: Unauthorized - detail: Authentication information missing or invalid - error-400: - description: Invalid input parameter or request body - content: - application/json: - schema: - $ref: '#/components/schemas/error' - examples: - 400 - Invalid environment info: - value: - status: 400 - title: Bad Request - detail: Invalid parameters - invalid-params: - - name: displayName - reason: Invalid environment display name - - name: databasePlanName - reason: Invalid database plan name - 400 - Invalid cluster info: - value: - status: 400 - title: Bad Request - detail: Invalid parameters - invalid-params: - - name: clusterName - reason: Incorrect cluster name - - name: namespace - reason: Invalid namespace - error-403: - description: User has no permission for this operation - content: - application/json: - schema: - $ref: '#/components/schemas/error' - examples: - 403 - Forbidden: - value: - status: 403 - title: Forbidden - detail: User has no permission for this operation - error-404: - description: Resource not found - content: - application/json: - schema: - $ref: '#/components/schemas/error' - examples: - 404 - Environment not found: - value: - status: 404 - title: Not Found - detail: Environment not found - Environment: - description: Environment information - content: - application/json: - schema: - type: object - properties: - environmentID: - type: string - internalName: - type: string - displayName: - type: string - clusterName: - type: string - namespace: - type: string - storagePlanName: - type: string - databasePlanName: - type: string - deploymentPurpose: - enum: - - Development - - Test - - Acceptance - - Production - type: string - dtapMode: - type: string - appName: - type: string - appUrl: - type: string - status: - enum: - - Creating - - Running - - Deleting - - Deleted - - Failed - type: string - readyReplicas: - type: integer - replicas: - type: integer - isAppStopped: - type: boolean - isManualDeploy: - type: boolean - buildStatus: - type: string - runtimeStatus: - type: string - networkStatus: - type: string - databaseStatus: - type: string - storageStatus: - type: string - licenseStatus: - type: string - creationStatus: - type: string - resourceStatus: - type: string - runtimeVersion: - type: string - lastStartTime: - type: string - buildExplanation: - type: string - storageExplanation: - type: string - runtimeExplanation: - type: string - MDA: - type: object - properties: - fileUrl: - type: string - status: - type: string - ociEnable: - type: boolean - ociName: - type: string - CustomEnvironmentVariables: - type: array - items: - type: object - properties: - name: - type: string - value: - type: string - CustomRuntimeSettings: - type: array - items: - type: object - properties: - name: - type: string - value: - type: string - CustomJVMOptions: - type: object - properties: - name: - type: string - value: - type: string - CustomJettyOptions: - type: object - properties: - name: - type: string - value: - type: string - Debugger: - type: object - properties: - url: - type: string - LogLevels: - type: array - items: - type: object - properties: - node: - type: string - level: - type: string - CustomTLSConfig: - type: object - properties: - enableTLS: - type: boolean - tlsConfig: - type: string - useExistingSecret: - type: string - CoreResource: - type: object - properties: - coreResourcePlan: - type: string - coreResourceSize: - enum: - - Small - - Medium - - Large - - Custom - type: string - cpuRequest: - type: number - cpuLimit: - type: number - memRequest: - type: number - memLimit: - type: number - ephemeralRequest: - type: number - ephemeralLimit: - type: number - x-examples: - Example 1: - environmentID: l48bv05l - internalName: l48bv05l - displayName: Project-A-Env - clusterName: eks-test - namespace: "test-ns" - storagePlanName: "bk-plan" - databasePlanName: "db-plan" - deploymentPurpose: Development - dtapMode: Development - appName: "E2E-App-Deploy-Portunus" - appUrl: "https://l48bv05l.portunus.mxplatform.net/" - status: Ready - readyReplicas: 1 - replicas: 1 - isAppStopped: false - isManualDeploy: false - buildStatus: Ready - runtimeStatus: Ready - networkStatus: Ready - databaseStatus: Ready - storageStatus: Ready - licenseStatus: Licensed - creationStatus: Created - resourceStatus: Ready - runtimeVersion: "11.6.2" - lastStartTime: "2026-04-14T18:17:10.666Z" - runtimeExplanation: "master: available: MinimumReplicasAvailable (Deployment has minimum availability)" - buildExplanation: "Build succeeded" - storageExplanation: "Successfully created secret" - MDA: - fileUrl: "e2e-app-deploy-portunus-146465ba.mda" - status: Success - ociEnable: true - ociName: "oci-image://docker.io/kyleliu/e2e-app-deploy-portunus:146465ba" - CustomEnvironmentVariables: - - name: cev1 - value: 12345 - - name: cev2 - value: abcdef - CustomRuntimeSettings: - - name: crs1 - value: 789 - - name: crs2 - value: xyz - CustomJVMOptions: - name: JAVA_TOOL_OPTIONS - value: "-Xmx512m -Xms256m" - CustomJettyOptions: - name: jettyOptions - value: "{\n\t\"k1\": \"v1\",\n\t\"k3\": \"v3\"\n}" - Debugger: - url: "https://l48bv05l.portunus.mxplatform.net/debugger/" - LogLevels: - - node: LogEnv - level: INFO - CustomTLSConfig: - enableTLS: true - tlsConfig: TlsCustom - useExistingSecret: UseExistedSecret - secretName: tls-secret - CoreResource: - coreResourcePlan: "low-level" - cpuRequest: 0.1 - cpuLimit: 1 - memRequest: 0.512 - memLimit: 1 - ephemeralRequest: 10 - ephemeralLimit: 20 - examples: - Environment: - value: - environmentID: l48bv05l - internalName: l48bv05l - displayName: Project-A-Env - clusterName: eks-test - namespace: "test-ns" - storagePlanName: "bk-plan" - databasePlanName: "db-plan" - deploymentPurpose: Development - dtapMode: Development - appName: "E2E-App-Deploy-Portunus" - appUrl: "https://l48bv05l.portunus.mxplatform.net/" - status: Ready - readyReplicas: 1 - replicas: 1 - isAppStopped: false - isManualDeploy: false - buildStatus: Ready - runtimeStatus: Ready - networkStatus: Ready - databaseStatus: Ready - storageStatus: Ready - licenseStatus: Licensed - creationStatus: Created - resourceStatus: Ready - runtimeVersion: "11.6.2" - lastStartTime: "2026-04-14T18:17:10.666Z" - runtimeExplanation: "master: available: MinimumReplicasAvailable (Deployment has minimum availability)" - buildExplanation: "Build succeeded" - storageExplanation: "Successfully created secret" - MDA: - fileUrl: "e2e-app-deploy-portunus-146465ba.mda" - status: Success - ociEnable: true - ociName: "oci-image://docker.io/kyleliu/e2e-app-deploy-portunus:146465ba" - CustomEnvironmentVariables: - - name: cev1 - value: 12345 - - name: cev2 - value: abcdef - CustomRuntimeSettings: - - name: crs1 - value: 789 - - name: crs2 - value: xyz - CustomJVMOptions: - name: JAVA_TOOL_OPTIONS - value: "-Xmx512m -Xms256m" - CustomJettyOptions: - name: jettyOptions - value: "{\n\t\"k1\": \"v1\",\n\t\"k3\": \"v3\"\n}" - Debugger: - url: "https://l48bv05l.portunus.mxplatform.net/debugger/" - LogLevels: - - node: LogEnv - level: INFO - CustomTLSConfig: - enableTLS: true - tlsConfig: TlsCustom - useExistingSecret: UseExistedSecret - secretName: tls-secret - CoreResource: - coreResourcePlan: "low-level" - cpuRequest: 0.1 - cpuLimit: 1 - memRequest: 0.512 - memLimit: 1 - ephemeralRequest: 10 - ephemeralLimit: 20 - Environments: - description: Environment list - content: - application/json: - schema: - type: array - items: - type: object - properties: - environmentID: - type: string - internalName: - type: string - displayName: - type: string - clusterName: - type: string - namespace: - type: string - storagePlanName: - type: string - databasePlanName: - type: string - deploymentPurpose: - enum: - - Development - - Test - - Acceptance - - Production - type: string - dtapMode: - type: string - appName: - type: string - appUrl: - type: string - status: - enum: - - Creating - - Running - - Deleting - - Deleted - - Failed - type: string - readyReplicas: - type: integer - replicas: - type: integer - isAppStopped: - type: boolean - isManualDeploy: - type: boolean - buildStatus: - type: string - runtimeStatus: - type: string - networkStatus: - type: string - databaseStatus: - type: string - storageStatus: - type: string - licenseStatus: - type: string - creationStatus: - type: string - resourceStatus: - type: string - runtimeVersion: - type: string - lastStartTime: - type: string - buildExplanation: - type: string - storageExplanation: - type: string - runtimeExplanation: - type: string - MDA: - type: object - properties: - fileUrl: - type: string - status: - type: string - ociEnable: - type: boolean - ociName: - type: string - CustomEnvironmentVariables: - type: array - items: - type: object - properties: - name: - type: string - value: - type: string - CustomRuntimeSettings: - type: array - items: - type: object - properties: - name: - type: string - value: - type: string - CustomJVMOptions: - type: object - properties: - name: - type: string - value: - type: string - CustomJettyOptions: - type: object - properties: - name: - type: string - value: - type: string - Debugger: - type: object - properties: - url: - type: string - LogLevels: - type: array - items: - type: object - properties: - node: - type: string - level: - type: string - CustomTLSConfig: - type: object - properties: - enableTLS: - type: boolean - tlsConfig: - type: string - useExistingSecret: - type: string - CoreResource: - type: object - properties: - coreResourcePlan: - type: string - coreResourceSize: - enum: - - Small - - Medium - - Large - - Custom - type: string - cpuRequest: - type: number - cpuLimit: - type: number - memRequest: - type: number - memLimit: - type: number - ephemeralRequest: - type: number - ephemeralLimit: - type: number - - x-examples: - Example 1: - - environmentID: l48bv05l - internalName: l48bv05l - displayName: Project-A-Env - clusterName: eks-test - namespace: "test-ns" - storagePlanName: "bk-plan" - databasePlanName: "db-plan" - deploymentPurpose: Development - dtapMode: Development - appName: "E2E-App-Deploy-Portunus" - appUrl: "https://l48bv05l.portunus.mxplatform.net/" - status: Ready - readyReplicas: 1 - replicas: 1 - isAppStopped: false - isManualDeploy: false - buildStatus: Ready - runtimeStatus: Ready - networkStatus: Ready - databaseStatus: Ready - storageStatus: Ready - licenseStatus: Licensed - creationStatus: Created - resourceStatus: Ready - runtimeVersion: "11.6.2" - lastStartTime: "2026-04-14T18:17:10.666Z" - runtimeExplanation: "master: available: MinimumReplicasAvailable (Deployment has minimum availability)" - buildExplanation: "Build succeeded" - storageExplanation: "Successfully created secret" - MDA: - fileUrl: "e2e-app-deploy-portunus-146465ba.mda" - status: Success - ociEnable: true - ociName: "oci-image://docker.io/kyleliu/e2e-app-deploy-portunus:146465ba" - CustomEnvironmentVariables: - - name: cev1 - value: 12345 - - name: cev2 - value: abcdef - CustomRuntimeSettings: - - name: crs1 - value: 789 - - name: crs2 - value: xyz - CustomJVMOptions: - name: JAVA_TOOL_OPTIONS - value: "-Xmx512m -Xms256m" - CustomJettyOptions: - name: jettyOptions - value: "{\n\t\"k1\": \"v1\",\n\t\"k3\": \"v3\"\n}" - Debugger: - url: "https://l48bv05l.portunus.mxplatform.net/debugger/" - LogLevels: - - node: LogEnv - level: INFO - CustomTLSConfig: - enableTLS: true - tlsConfig: TlsCustom - useExistingSecret: UseExistedSecret - secretName: tls-secret - CoreResource: - coreResourcePlan: "low-level" - cpuRequest: 0.1 - cpuLimit: 1 - memRequest: 0.512 - memLimit: 1 - ephemeralRequest: 10 - ephemeralLimit: 20 - examples: - Environments: - value: - - environmentID: l48bv05l - internalName: l48bv05l - displayName: Project-A-Env - clusterName: eks-test - namespace: "test-ns" - storagePlanName: "bk-plan" - databasePlanName: "db-plan" - deploymentPurpose: Development - dtapMode: Development - appName: "E2E-App-Deploy-Portunus" - appUrl: "https://l48bv05l.portunus.mxplatform.net/" - status: Ready - readyReplicas: 1 - replicas: 1 - isAppStopped: false - isManualDeploy: false - buildStatus: Ready - runtimeStatus: Ready - networkStatus: Ready - databaseStatus: Ready - storageStatus: Ready - licenseStatus: Licensed - creationStatus: Created - resourceStatus: Ready - runtimeVersion: "11.6.2" - lastStartTime: "2026-04-14T18:17:10.666Z" - runtimeExplanation: "master: available: MinimumReplicasAvailable (Deployment has minimum availability)" - buildExplanation: "Build succeeded" - storageExplanation: "Successfully created secret" - MDA: - fileUrl: "e2e-app-deploy-portunus-146465ba.mda" - status: Success - ociEnable: true - ociName: "oci-image://docker.io/kyleliu/e2e-app-deploy-portunus:146465ba" - CustomEnvironmentVariables: - - name: cev1 - value: 12345 - - name: cev2 - value: abcdef - CustomRuntimeSettings: - - name: crs1 - value: 789 - - name: crs2 - value: xyz - CustomJVMOptions: - name: JAVA_TOOL_OPTIONS - value: "-Xmx512m -Xms256m" - CustomJettyOptions: - name: jettyOptions - value: "{\n\t\"k1\": \"v1\",\n\t\"k3\": \"v3\"\n}" - Debugger: - url: "https://l48bv05l.portunus.mxplatform.net/debugger/" - LogLevels: - - node: LogEnv - level: INFO - CustomTLSConfig: - enableTLS: true - tlsConfig: TlsCustom - useExistingSecret: UseExistedSecret - secretName: tls-secret - CoreResource: - coreResourcePlan: "low-level" - cpuRequest: 0.1 - cpuLimit: 1 - memRequest: 0.512 - memLimit: 1 - ephemeralRequest: 10 - ephemeralLimit: 20 - schemas: - EnvironmentRequestNew: - title: EnvironmentRequestNew - type: object - properties: - displayName: - type: string - clusterName: - type: string - namespace: - type: string - storagePlanName: - type: string - databasePlanName: - type: string - deploymentPackageName: - type: string - deploymentPurpose: - enum: - - Development - - Test - - Acceptance - - Production - type: string - coreResourcePlan: - type: string - coreResourceSize: - enum: - - Small - - Medium - - Large - - Custom - type: string - xml: - name: EnvironmentRequest - EnvironmentRequestPatch: - title: EnvironmentRequestPatch - type: object - properties: - displayName: - type: string - dtapMode: - type: string - replicas: - type: integer - format: int32 - appUrl: - type: string - CustomEnvironmentVariables: - type: array - items: - title: CustomEnvironmentVariable - type: object - properties: - name: - type: string - value: - type: string - xml: - name: CustomEnvironmentVariable - CustomRuntimeSettings: - type: array - items: - title: CustomRuntimeSetting - type: object - properties: - name: - type: string - value: - type: string - xml: - name: CustomRuntimeSetting - CustomJVMOptions: - title: '' - type: object - properties: - value: - type: string - CustomJettyOptions: - title: '' - type: object - properties: - name: - type: string - value: - type: string - Debugger: - title: '' - type: object - properties: - password: - type: string - LogLevels: - type: array - items: - title: LogLevels - type: object - properties: - node: - type: string - level: - enum: - - CRITICAL - - ERROR - - WARNING - - INFO - - DEBUG - - TRACE - type: string - xml: - name: LogLevels - CustomTLSConfig: - title: '' - type: object - properties: - enableTLS: - type: boolean - default: false - tlsConfig: - enum: - - TlsDefault - - TlsCustom - type: string - secretName: - type: string - tlsCertificate: - type: string - tlsPrivateKey: - type: string - useExistingSecret: - enum: - - UseExistedSecret - - AddNewKeyCertificate - type: string - CoreResource: - title: '' - type: object - properties: - coreResourcePlan: - type: string - coreResourceSize: - enum: - - Small - - Medium - - Large - - Custom - type: string - cpuRequest: - type: number - cpuLimit: - type: number - memRequest: - type: number - memLimit: - type: number - ephemeralRequest: - type: number - ephemeralLimit: - type: number - xml: - name: EnvironmentPatchRequest - error: - type: object - description: Error response - properties: - status: - type: integer - description: Response status code. - title: - type: string - description: 'A short, human-readable summary of the problem type.' - detail: - type: string - description: A human-readable explanation specific to this occurrence of the problem. - invalid-params: - type: array - description: "(Optional) JSON list List of name, reason keys for invalid attribute values.\r\n" - items: - type: object - properties: - name: - type: string - description: "Parameter name.\r\n" - reason: - type: string - description: "Reason for error.\r\n" - required: - - status - - title - - detail - x-examples: - Error response: - status: 400 - title: Bad Request - detail: Please see invalid-params list - invalid-params: - - name: name - reason: Name can not be empty - securitySchemes: - basicAuth: - type: http - scheme: basic - mxtoken: - type: apiKey - name: Authorization - in: header -security: - - basicAuth: [] - - mxtoken: [] -tags: - - name: apps - description: '' diff --git a/static/openapi-spec/openapi-group.yaml b/static/openapi-spec/openapi-group-v1.yaml similarity index 100% rename from static/openapi-spec/openapi-group.yaml rename to static/openapi-spec/openapi-group-v1.yaml diff --git a/static/openapi-spec/openapi-group-v2.yaml b/static/openapi-spec/openapi-group-v2.yaml new file mode 100644 index 00000000000..4c1a185c789 --- /dev/null +++ b/static/openapi-spec/openapi-group-v2.yaml @@ -0,0 +1,1007 @@ +openapi: 3.0.1 +info: + version: 2.0.0 + title: Group Service v2 + description: "Provide services for managing the governance for certain resources. Group can be used to restrict access and modification of a set of apps or marketplace contents to a specific set of people.\r\n" +servers: + - url: 'https://pmp-demo.privateplatform.mendix.com/groupservice/v2' +paths: + /groups: + get: + tags: + - groups + summary: Get all groups of the current user + description: Get all groups of the current user + operationId: getGroups + responses: + '200': + $ref: '#/components/responses/groups' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + post: + tags: + - groups + summary: Create a new group + description: |- + ## Create a new group + + Name field is mandatory. Name can only be alphanumeric, spaces, underscores, or dashes. Max length for name field is 100 characters. Max length for Description is 250 characters. + operationId: createGroup + requestBody: + description: Group creation request + required: false + content: + application/json: + schema: + $ref: '#/components/schemas/GroupCreateRequest' + examples: + Group creation request: + value: + name: GroupA + description: Test Group + parentGroupName: GroupB + responses: + '201': + $ref: '#/components/responses/group' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + '/groups/{groupId}': + get: + tags: + - groups + summary: Get a group + description: Get a single group by group Id + operationId: getGroup + parameters: + - name: groupId + in: path + description: Group Id + required: true + schema: + type: string + responses: + '200': + $ref: '#/components/responses/group' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + put: + tags: + - groups + summary: Edit a group + description: "## Use this operation to edit a group\r\n\r\n- If a field is omitted in the request body, it is not updated. To set field to empty specify with empty string.\r\n" + operationId: changeGroup + parameters: + - name: groupId + in: path + description: Group Id + required: true + schema: + type: string + requestBody: + description: Group name, description or parent group change request + required: false + content: + application/json: + schema: + $ref: '#/components/schemas/GroupChangeRequest' + examples: + Input group name or description: + value: + name: GroupA + description: Test Group + parentGroupName: GroupB + responses: + '200': + $ref: '#/components/responses/group' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + delete: + tags: + - groups + summary: Deletes a group + description: Delete a group + operationId: deleteGroup + parameters: + - name: groupId + in: path + description: Group Id + required: true + schema: + type: string + responses: + '204': + description: Group deleted successfully, no content in response body + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + '/groups/{groupId}/members': + get: + tags: + - groups + summary: Retrieve all members in group + description: Retrieve all members in group + operationId: getGroupMembers + parameters: + - name: groupId + in: path + description: Group Id + required: true + schema: + type: string + responses: + '200': + $ref: '#/components/responses/members' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + post: + tags: + - groups + summary: 'Add users into group ' + description: Add specified users into the group + operationId: addUserIntoGroup + parameters: + - name: groupId + in: path + description: Group Id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MembersAddRequest' + responses: + '200': + $ref: '#/components/responses/members' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + delete: + tags: + - groups + summary: Remove users from group + description: Remove specified users from the group + operationId: removeUsersFromGroup + parameters: + - name: groupId + in: path + description: Group Id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MembersRemoveRequest' + responses: + '204': + description: Group member user removed successfully, no content in response body + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + /groups/{groupId}/members/{userId}: + patch: + tags: + - groups + summary: Update group member role + description: Update member role in the group. + operationId: updateGroupMemberRole + parameters: + - name: groupId + in: path + description: Group Id + required: true + schema: + type: string + - name: userId + in: path + description: Group member user id + required: true + schema: + type: string + requestBody: + description: Group member role change request + content: + application/json: + schema: + $ref: '#/components/schemas/MemberRolePatchRequest' + responses: + '200': + $ref: '#/components/responses/member' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + delete: + tags: + - groups + summary: Remove a user from group + description: Remove a specified user from the group + operationId: removeUserFromGroup + parameters: + - name: groupId + in: path + description: Group Id + required: true + schema: + type: string + - name: userId + in: path + description: Group member user id + required: true + schema: + type: string + responses: + '204': + description: Group member user removed successfully, no content in response body + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + /groups/{groupId}/namespaces: + get: + tags: + - groups + summary: Retrive all cluster namespaces assigned to group + description: Retrive all cluster namespaces assigned to the group + operationId: getNamespacesOfGroup + parameters: + - name: groupId + in: path + description: Group Id + required: true + schema: + type: string + responses: + '200': + $ref: '#/components/responses/namespaces' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + post: + tags: + - groups + summary: Assign cluster namespace to group + description: Assign specified cluster namespace to the group + operationId: assignNamespacesToGroup + parameters: + - name: groupId + in: path + description: Group Id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/NamespacesAddRequest' + responses: + '200': + $ref: '#/components/responses/namespaces' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + patch: + tags: + - groups + summary: Update deployment purpose of cluster namespace + description: Update deployment purpose of the specified cluster namespace + operationId: updateNamespacesDeployPurposes + parameters: + - name: groupId + in: path + description: Group Id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/NamespacesPatchRequest' + responses: + '200': + $ref: '#/components/responses/namespaces' + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + delete: + tags: + - groups + summary: Remove cluster namespaces from group + description: Remove specified cluster namespaces from the group + operationId: removeNamespacesFromGroup + parameters: + - name: groupId + in: path + description: Group Id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/NamespacesRemoveRequest' + responses: + '204': + description: Cluster namespaces removed successfully, no content in response body + '400': + $ref: '#/components/responses/error-400' + '401': + $ref: '#/components/responses/error-401' + '403': + $ref: '#/components/responses/error-403' + '404': + $ref: '#/components/responses/error-404' + + +components: + parameters: + groupId: + name: groupId + in: path + description: Group Id + required: true + schema: + type: string + format: uuid + pattern: '^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-4[a-fA-F0-9]{3}-[89abAB][a-fA-F0-9]{3}-[a-fA-F0-9]{12}' + example: e48b3e22-d6ad-4c81-aa5e-603776d22b4d + memberId: + name: memberId + in: path + description: Group Member Id + required: true + schema: + type: string + format: uuid + pattern: '^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-4[a-fA-F0-9]{3}-[89abAB][a-fA-F0-9]{3}-[a-fA-F0-9]{12}' + example: e48b3e22-d6ad-4c81-aa5e-603776d22b4d + + + responses: + error-401: + description: Authentication information is missing or invalid + content: + application/json: + schema: + $ref: '#/components/schemas/error' + examples: + 401 - Unauthorized: + value: + status: 401 + title: Unauthorized + detail: Authentication information missing or invalid + error-400: + description: Invalid input parameter or request body + content: + application/json: + schema: + $ref: '#/components/schemas/error' + examples: + 400 - Invalid group id: + value: + status: 400 + title: Bad Request + detail: Invalid parameters + invalid-params: + - name: groupId + reason: Invalid group id + 400 - Invalid group member user id: + value: + status: 400 + title: Bad Request + detail: Invalid parameters + invalid-params: + - name: userId + reason: Invalid group member user id + 400 - Invalid parameters: + value: + status: 400 + title: Bad Request + detail: Invalid parameters + invalid-params: + - name: groupId + reason: Invalid group id + - name: userId + reason: Invalid group member user id + error-403: + description: User has no permission for this operation + content: + application/json: + schema: + $ref: '#/components/schemas/error' + examples: + 403 - Forbidden: + value: + status: 403 + title: Forbidden + detail: User has no permission for this operation + error-404: + description: Resource not found + content: + application/json: + schema: + $ref: '#/components/schemas/error' + examples: + 404 - Group not found: + value: + status: 404 + title: Not Found + detail: Group not found + 404 - Group member not found: + value: + status: 404 + title: Not Found + detail: Group member user not found + + group: + description: Group + content: + application/json: + schema: + type: object + properties: + id: + type: string + description: Group Id + example: 36279c9b-9b5a-4599-b548-7fe09d792f76 + name: + type: string + description: Group name + example: GroupA + description: + type: string + description: Group description + example: Test group + memberCount: + type: integer + description: Group member count + example: 7 + parentGroup: + type: string + description: Parent group name + example: GroupB + examples: + Group: + value: + id: 36279c9b-9b5a-4599-b548-7fe09d792f76 + name: GroupA + description: Test group + memberCount: 7 + parentGroup: GroupB + + groups: + description: Group list + content: + application/json: + schema: + type: array + items: + type: object + properties: + id: + type: string + description: Group Id + example: 36279c9b-9b5a-4599-b548-7fe09d792f76 + name: + type: string + description: Group name + example: GroupA + description: + type: string + description: Group description + example: Test group + memberCount: + type: integer + description: Group member count + example: 7 + parentGroup: + type: string + description: Parent group name + example: GroupB + examples: + Group list: + value: + - id: 7f040a46-b222-4e3e-bf9a-dd8b12babfe5 + name: GroupC + description: QA Group + memberCount: 3 + parentGroup: GroupX + - id: 34f14ca6-1369-4bbe-9715-35e9ec635f64 + name: GroupB + description: Test Group + memberCount: 4 + parentGroup: GroupY + - id: 36279c9b-9b5a-4599-b548-7fe09d792f76 + name: GroupA + description: Developer Group + memberCount: 7 + parentGroup: GroupZ + + members: + description: Group member list + content: + application/json: + schema: + type: array + items: + type: object + properties: + id: + type: string + description: Group member user Id + example: 4cf55181-cfea-47bc-b798-3a51a8e5fff6 + name: + type: string + description: Group member user name + example: kean + email: + type: string + description: Group member user email + example: kean.li@lato-bycicles.com + memberRoles: + type: array + items: + type: object + properties: + directRole: + type: string + description: Direct role of the user in the group + example: Developer + isGroupAdmin: + type: boolean + description: Indicates if the user is a group admin + example: false + examples: + Group member list: + value: + - id: c963c178-7cba-49f8-baf2-1c1ae64ed63c + name: tom + email: tom@lato-bycicles.com + memberRoles: + - directRole: Developer + isGroupAdmin: false + - id: 4cf55181-cfea-47bc-b798-3a51a8e5fff6 + name: kean + email: kean.li@lato-bycicles.com + memberRoles: + - directRole: Developer + isGroupAdmin: false + - id: cdcbd426-dfb7-4689-9939-3312521f13ff + name: john + email: john@lato-bycicles.com + memberRoles: + - directRole: Owner + isGroupAdmin: true + - id: af50eaf8-ff62-4910-b5b0-3e685f520fc8 + name: jack + email: jack@lato-bycicles.com + memberRoles: + - directRole: Developer + isGroupAdmin: false + + member: + description: Group member + content: + application/json: + schema: + type: object + properties: + id: + type: string + description: Group member user Id + example: 4cf55181-cfea-47bc-b798-3a51a8e5fff6 + name: + type: string + description: Group member user name + example: kean + email: + type: string + description: Group member user email + example: kean.li@lato-bycicles.com + memberRoles: + type: array + items: + type: object + properties: + directRole: + type: string + description: Direct role of the user in the group + example: Developer + isGroupAdmin: + type: boolean + description: Indicates if the user is a group admin + example: false + examples: + Group member: + value: + id: 4cf55181-cfea-47bc-b798-3a51a8e5fff6 + name: kean + email: kean.li@lato-bycicles.com + memberRoles: + - directRole: Developer + isGroupAdmin: false + + namespaces: + description: Group namespace list + content: + application/json: + schema: + type: array + items: + type: object + properties: + deployMethod: + enum: + - Standalone + - Connected + type: string + description: Deployment method for the namespace + example: Connected + clusterName: + type: string + description: Name of the cluster + example: test-cluster + namespace: + type: string + description: Name of the namespace + example: test-namespace + DeployPurposes: + title: DeployPurposes + type: object + properties: + isDevelopment: + type: boolean + default: false + isTest: + type: boolean + default: false + isAcceptance: + type: boolean + default: false + isProduction: + type: boolean + default: false + examples: + Group namespace list: + value: + - deployMethod: Standalone + clusterName: test-cluster + namespace: dev-namespace + DeployPurposes: + isDevelopment: true + isTest: false + isAcceptance: false + isProduction: false + - deployMethod: Connected + clusterName: test-cluster + namespace: test-namespace + DeployPurposes: + isDevelopment: false + isTest: true + isAcceptance: false + isProduction: false + schemas: + GroupCreateRequest: + type: object + title: GroupCreateRequest + description: Group creation request + properties: + name: + type: string + description: Group name + example: GroupA + description: + type: string + description: Group description + maxLength: 250 + parentGroupName: + type: string + description: Parent group name + example: GroupB + required: + - name + - parentGroupName + + GroupChangeRequest: + type: object + title: GroupChangeRequest + description: Group change request + properties: + name: + type: string + description: Group name + example: GroupA + description: + type: string + description: Group description + maxLength: 250 + parentGroupName: + type: string + description: Parent group name + example: GroupB + required: + - name + - parentGroupName + + MemberRolePatchRequest: + type: object + title: MemberRolePatchRequest + description: Group member role change request + properties: + directRole: + type: string + description: Group member role + example: Operator + isGroupAdmin: + type: boolean + description: Indicates if the user is a group admin + example: true + + MembersAddRequest: + title: MembersAddRequest + type: object + properties: + userId: + type: string + description: Group member user id + example: 4cf55181-cfea-47bc-b798-3a51 + directRole: + type: string + description: Group member role + example: Operator + isGroupAdmin: + type: boolean + description: Indicates if the user is a group admin + default: false + example: true + + MembersRemoveRequest: + title: MembersRemoveRequest + type: object + properties: + userId: + type: string + description: Group member user id + example: 4cf55181-cfea-47bc-b798-3a51 + + NamespacesAddRequest: + title: NamespacesAddRequest + type: object + description: Cluster namespaces input for group assignment + properties: + deployMethod: + enum: + - Standalone + - Connected + type: string + description: Deployment method for the namespace + example: Connected + clusterName: + type: string + description: Name of the cluster + example: test-cluster + namespace: + type: string + description: Name of the namespace + example: test-namespace + DeployPurposes: + title: DeployPurposes + type: object + properties: + isDevelopment: + type: boolean + default: false + isTest: + type: boolean + default: false + isAcceptance: + type: boolean + default: false + isProduction: + type: boolean + default: false + + NamespacesPatchRequest: + title: NamespacesPatchRequest + type: object + description: Request to update deployment purpose of cluster namespaces + properties: + deployMethod: + enum: + - Standalone + - Connected + type: string + description: Deployment method for the namespace + example: Connected + clusterName: + type: string + description: Name of the cluster + example: test-cluster + namespace: + type: string + description: Name of the namespace + example: test-namespace + DeployPurposes: + title: DeployPurposes + type: object + properties: + isDevelopment: + type: boolean + default: false + isTest: + type: boolean + default: false + isAcceptance: + type: boolean + default: false + isProduction: + type: boolean + default: false + + NamespacesRemoveRequest: + title: NamespacesRemoveRequest + type: object + description: Cluster namespaces input for group unassignment + properties: + deployMethod: + enum: + - Standalone + - Connected + type: string + description: Deployment method for the namespace + example: Connected + clusterName: + type: string + description: Name of the cluster + example: test-cluster + namespace: + type: string + description: Name of the namespace + example: test-namespace + + error: + type: object + description: Error response + properties: + status: + type: integer + description: Response status code. + example: 400 + title: + type: string + description: 'A short, human-readable summary of the problem type.' + example: Bad Request + detail: + type: string + description: A human-readable explanation specific to this occurrence of the problem. + example: Please see invalid-params list + invalid-params: + type: array + description: '(Optional) JSON list List of name, reason keys for invalid attribute values.' + items: + type: object + properties: + name: + type: string + description: Parameter name. + example: groupId + reason: + type: string + description: Reason for error. + example: Invalid group id + required: + - status + - title + - detail + + securitySchemes: + basicAuth: + type: http + scheme: basic + mxtoken: + type: apiKey + name: Authorization + in: header +security: + - basicAuth: [] + - mxtoken: [] +tags: + - name: groups + description: 'For managing groups access certain restricted resources include app, marketplace contents and cluster namespaces' \ No newline at end of file diff --git a/static/openapi-spec/openapi-marketplace.yaml b/static/openapi-spec/openapi-marketplace-v1.yaml similarity index 100% rename from static/openapi-spec/openapi-marketplace.yaml rename to static/openapi-spec/openapi-marketplace-v1.yaml diff --git a/static/openapi-spec/pmp-pipeline.yaml b/static/openapi-spec/openapi-pipeline-v1.yaml similarity index 100% rename from static/openapi-spec/pmp-pipeline.yaml rename to static/openapi-spec/openapi-pipeline-v1.yaml diff --git a/static/openapi-spec/openapi-pipeline-v2.yaml b/static/openapi-spec/openapi-pipeline-v2.yaml new file mode 100644 index 00000000000..999232cf252 --- /dev/null +++ b/static/openapi-spec/openapi-pipeline-v2.yaml @@ -0,0 +1,300 @@ +openapi: 3.0.3 +info: + title: Pipeline Service v2 + description: "Provide services for managing the Pipeline resources. The Pipeline can be used to build app package and deploy app package image into a specific environment. \r\n" + version: 2.0.0 + +servers: +- url: https://pmp-demo.mxplatform.net/pipelineservice/v2 +security: +- {} +- basicAuth: [] +- mxtoken: [] + +tags: +- name: pipelines + description: "For managing build and deploy pipeline resources" + +paths: + /pipelines/{pipelineId}: + get: + tags: + - pipelines + description: Get pipeline running information. + operationId: getPipelineInfo + parameters: + - name: pipelineId + in: path + description: Pipeline Id + required: true + schema: + type: string + responses: + "200": + $ref: "#/components/responses/GetPipeline" + "401": + $ref: "#/components/responses/UnauthorizedError" + put: + tags: + - pipelines + summary: Set the current step status of the pipeline + description: Set the current run step status of the pipeline to Success or Failed. + operationId: putPipelineStatus + parameters: + - name: pipelineId + in: path + description: Pipeline Id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/pipeline_set_status_body" + examples: + Set pipeline successful status: + value: + stepStatus: Success + callFrom: QA Team + Set pipeline failed status: + value: + stepStatus: Failed + callFrom: Dev Team + responses: + "200": + description: successful operation + "401": + $ref: "#/components/responses/UnauthorizedError" + /pipelines: + post: + tags: + - pipelines + summary: Create and run a new pipeline for build or deploy + description: Create a pipeline for build or deployment. This API is only available when Build Utility is "Kubernetes". + operationId: CreatePipeline + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/pipeline_creation_request_body" + examples: + Request a pipeline for build: + value: + pipelineType: Build + appId: ff4c5472-50bc-45ad-b1e1-817217111628 + branchName: main + revisionId: c6d5bd3d + majorVersion: 1 + minorVersion: 0 + patchVersion: 2 + Request a pipeline for deploy: + value: + pipelineType: Deploy + appId: ff4c5472-50bc-45ad-b1e1-817217111628 + packageName: sgp-v1069-1.0.2.c6d5bd3d.mda + envInternalName: sgpv1069 + responses: + "202": + $ref: "#/components/responses/CreatePipeline" + "401": + $ref: "#/components/responses/UnauthorizedError" + /pipelines/manual-approvals: + post: + tags: + - pipelines + summary: Approve or reject a manual step of pipeline + description: Approve or reject a manual step of a waiting pipeline. + operationId: approvePipelineStep1 + parameters: + - name: pipelineId + in: query + description: The pipeline Id which is waiting for manual approval. + required: false + schema: + type: string + - name: approve + in: query + description: Approve or reject pipeline in waiting state, true for approve, false for reject. + required: false + schema: + type: boolean + default: false + responses: + "200": + description: successful operation, Pipeline Step Approved or Rejected + "401": + $ref: "#/components/responses/UnauthorizedError" +components: + schemas: + pipeline_set_status_body: + type: object + description: Request body for setting pipeline status + properties: + stepStatus: + type: string + description: The pipeline step status to be set, Success or Failed + callFrom: + type: string + description: Who is calling this API to set the pipeline step status, e.g. R&D Team, QA Team, Dev Team, etc. + x-examples: + Example 1: + stepStatus: Success + callFrom: R&D Team + pipeline_creation_request_body: + type: object + description: Request body for creating and running a new pipeline + properties: + pipelineType: + type: string + description: Type of the pipeline, Build or Deploy + appId: + type: string + description: Build or Deploy the package of the app with the specified appId + branchName: + type: string + description: The branch name of the app code to build, only required for Build pipeline + revisionId: + type: string + description: The revision ID of the app code to build, only required for Build pipeline + majorVersion: + type: integer + description: The major version of the app code to build, only required for Build pipeline + minorVersion: + type: integer + description: The minor version of the app code to build, only required for Build pipeline + patchVersion: + type: integer + description: The patch version of the app code to build, only required for Build pipeline + packageName: + type: string + description: The name of the app package to deploy, only required for Deploy pipeline + envInternalName: + type: string + description: The environment with specified internal name for deploy the app package, only required for Deploy pipeline + x-examples: + Example 1: + pipelineType: Build + appId: ff4c5472-50bc-45ad-b1e1-817217111628 + branchName: main + revisionId: c6d5bd3d + majorVersion: 1 + minorVersion: 0 + patchVersion: 2 + packageName: sgp-v1069-1.0.2.c6d5bd3d.mda + envInternalName: sgpv1069 + responses: + UnauthorizedError: + description: Authentication information is missing or invalid + headers: + WWW-Authenticate: + schema: + type: string + GetPipeline: + description: Example response + content: + application/json: + schema: + type: object + properties: + PipelineType: + type: string + DTAPMode: + type: string + Source: + type: string + Status: + type: string + PipelineTemplateGuid: + type: integer + Step_2: + type: object + properties: + Name: + type: string + Category: + type: string + Arguments: + type: string + Wait: + type: boolean + Status: + type: string + StepTemplateGuid: + type: integer + ExecutionTime: + type: integer + StartTime: + type: string + x-examples: + Example 1: + PipelineType: Deploy + DTAPMode: D + Source: CreateEnvironment + Status: Success + PipelineTemplateGuid: 217017207047961020 + Step_2: + Name: Deploy Artifact to Target Environment + Category: DeployApp + Arguments: "{}" + Wait: false + Status: Success + StepTemplateGuid: 263179103229699200 + ExecutionTime: 4514 + StartTime: 2025-10-29T10:42:03.535Z + examples: + Get build pipeline information: + value: + PipelineType: Build + Source: UI + Status: Success + PipelineTemplateGuid: 217017207047974100 + Step_2: + Name: K8S Pod Build + Category: K8sPodBuild + Arguments: "{}" + Wait: true + Status: Success + StepTemplateGuid: 263179103229674700 + ExecutionTime: 175 + StartTime: 2025-10-29T10:23:14.589Z + Get deploy pipeline information: + value: + PipelineType: Deploy + DTAPMode: D + Source: CreateEnvironment + Status: Success + PipelineTemplateGuid: 217017207047961020 + Step_2: + Name: Deploy Artifact to Target Environment + Category: DeployApp + Arguments: "{}" + Wait: false + Status: Success + StepTemplateGuid: 263179103229699200 + ExecutionTime: 4514 + StartTime: 2025-10-29T10:42:03.535Z + CreatePipeline: + description: Example response + content: + application/json: + schema: + type: object + properties: + pipelineId: + type: integer + x-examples: + Example 1: + pipelineId: 144678138035242200 + examples: + Response for a pipeline creation: + value: + pipelineId: 144678138035242200 + securitySchemes: + basicAuth: + type: http + scheme: basic + mxtoken: + type: apiKey + name: Authorization + in: header diff --git a/static/openapi-spec/openapi-project.yaml b/static/openapi-spec/openapi-project-v1.yaml similarity index 100% rename from static/openapi-spec/openapi-project.yaml rename to static/openapi-spec/openapi-project-v1.yaml diff --git a/static/openapi-spec/openapi-project-v2.yaml b/static/openapi-spec/openapi-project-v2.yaml new file mode 100644 index 00000000000..80bf980dd10 --- /dev/null +++ b/static/openapi-spec/openapi-project-v2.yaml @@ -0,0 +1,1141 @@ +openapi: 3.0.1 +info: + version: 2.0.0 + title: Project Service v2 + description: "Provide services for managing Project app, team members, sharing users and sharing groups access.\r\n" +servers: + - url: 'https://pmp-demo.privateplatform.mendix.com/projectservice/v2' +paths: + /projects: + get: + tags: + - projects + summary: Get my projects + description: Get my project list + operationId: getMyProjects + parameters: + - name: status + in: query + description: Get my active projects or archived projects + schema: + enum: + - Active + - Archived + responses: + '200': + $ref: '#/components/responses/projects' + '401': + $ref: '#/components/responses/Error-401' + '403': + $ref: '#/components/responses/Error-403' + '404': + $ref: '#/components/responses/Error-404' + + post: + tags: + - projects + summary: Create a new project + description: 'Create a new project with input app name, summary, template id' + operationId: createProject + requestBody: + description: Create new project request + required: false + content: + application/json: + schema: + $ref: '#/components/schemas/ProjectCreateRequest' + examples: + Create a new project with template version uuid: + value: + name: Project-A + description: Project A + group: Group-X + useAppTemplate: true + appTemplate: + versionUUID: "344ac863-6510-46f5-b3de-06ce7e8489d3" + Create a new project with template id and template version: + value: + name: Project-A + description: Project A + group: Group-X + useAppTemplate: true + appTemplate: + templateId: "1" + templateVersion: "10.24.90436" + Create a new blank project without template: + value: + name: Project-A + description: Project A + group: Group-X + useAppTemplate: false + + responses: + '202': + $ref: '#/components/responses/job' + '400': + $ref: '#/components/responses/Error-400' + '401': + $ref: '#/components/responses/Error-401' + '403': + $ref: '#/components/responses/Error-403' + '404': + $ref: '#/components/responses/Error-404' + + '/projects/jobs/{jobId}': + get: + tags: + - projects + summary: Get project creation status + description: Get project creation status + operationId: getJob + parameters: + - name: jobId + in: path + description: Job Id of project creation task + required: true + schema: + type: string + responses: + '200': + description: Get project creation job status successfully + content: + application/json: + schema: + type: object + properties: + projectId: + type: string + description: Project id created by the job. + example: ec603b34-2ceb-4011-9c9c-d7c10ef1ca4e + status: + type: string + description: Project creation job status, such as "Open", "Success", "Failed". + errorMessage: + type: string + description: Error message for failed project creation jobs. + example: '' + required: + - projectId + - status + examples: + Job status: + value: + projectId: ec603b34-2ceb-4011-9c9c-d7c10ef1ca4e + status: Success + errorMessage: '' + + '400': + $ref: '#/components/responses/Error-400' + '401': + $ref: '#/components/responses/Error-401' + '403': + $ref: '#/components/responses/Error-403' + '404': + description: Project creation job not found + content: + application/json: + schema: + type: object + properties: + code: + type: integer + example: 404 + message: + type: string + example: Project creation job not found + examples: + Error 404 - Job not found: + value: + code: 404 + message: Project creation job not found + + '/projects/{projectId}': + get: + tags: + - projects + summary: Get a project with project Id + description: Get a project details with project Id + operationId: getProject + parameters: + - name: status + in: query + description: Get active project or archived project with project Id + schema: + enum: + - Active + - Archived + - name: projectId + in: path + description: Project Id + required: true + schema: + type: string + responses: + '200': + $ref: '#/components/responses/project' + '400': + $ref: '#/components/responses/Error-400' + '401': + $ref: '#/components/responses/Error-401' + '403': + $ref: '#/components/responses/Error-403' + '404': + $ref: '#/components/responses/Error-404' + + patch: + tags: + - projects + summary: Change project info and status + description: 'Change project name, description or status' + operationId: changeProjectInfoOrStatus + parameters: + - name: projectId + in: path + description: Project Id + required: true + schema: + type: string + requestBody: + description: Change project request + content: + application/json: + schema: + $ref: '#/components/schemas/ProjectPatchRequest' + responses: + '200': + $ref: '#/components/responses/project' + '400': + $ref: '#/components/responses/Error-400' + '401': + $ref: '#/components/responses/Error-401' + '403': + $ref: '#/components/responses/Error-403' + '404': + $ref: '#/components/responses/Error-404' + + delete: + tags: + - projects + summary: Delete project with project Id + description: Delete project with project Id + operationId: deleteProject + parameters: + - name: projectId + in: path + description: Project Id + required: true + schema: + type: string + responses: + '204': + description: Project deleted successfully, no content in response body + '400': + $ref: '#/components/responses/Error-400' + '401': + $ref: '#/components/responses/Error-401' + '403': + $ref: '#/components/responses/Error-403' + '404': + $ref: '#/components/responses/Error-404' + + '/projects/{projectId}/owner': + put: + tags: + - projects + summary: Change owner user and group of project + description: Change owner user and group of project + operationId: changeProjectOwner + parameters: + - name: projectId + in: path + description: Project Id + required: true + schema: + type: string + requestBody: + description: Input owner user and group name of project + required: false + content: + application/json: + schema: + $ref: '#/components/schemas/OwnerChangeRequest' + examples: + Project owner user and group: + value: + userName: User1 + groupName: Group1 + responses: + '200': + $ref: '#/components/responses/project' + '400': + $ref: '#/components/responses/Error-400' + '401': + $ref: '#/components/responses/Error-401' + '403': + $ref: '#/components/responses/Error-403' + '404': + $ref: '#/components/responses/Error-404' + + /projects/{projectId}/sharing-groups: + post: + tags: + - projects + summary: Add groups into sharing groups of project + description: Add the specified groups into the sharing groups of the project. + operationId: addProjectSharingGroups + parameters: + - name: projectId + in: path + description: Project Id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SharingGroupsAddRequest' + responses: + '200': + $ref: '#/components/responses/sharing-groups' + '400': + $ref: '#/components/responses/Error-400' + '401': + $ref: '#/components/responses/Error-401' + '403': + $ref: '#/components/responses/Error-403' + '404': + $ref: '#/components/responses/Error-404' + + get: + tags: + - projects + summary: Get the sharing groups of the project + description: Get the sharing groups of the project + operationId: getProjectShareGroups + parameters: + - name: projectId + in: path + description: Project Id + required: true + schema: + type: string + responses: + '200': + $ref: '#/components/responses/sharing-groups' + '400': + $ref: '#/components/responses/Error-400' + '401': + $ref: '#/components/responses/Error-401' + '403': + $ref: '#/components/responses/Error-403' + '404': + $ref: '#/components/responses/Error-404' + + delete: + tags: + - projects + summary: Remove groups from sharing groups of project + description: Remove the specified groups from the sharing groups of the project. + operationId: removeProjectSharingGroups + parameters: + - name: projectId + in: path + description: Project Id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SharingGroupsRemoveRequest' + responses: + '204': + description: Project sharing groups removed successfully, no content in response body + '400': + $ref: '#/components/responses/Error-400' + '401': + $ref: '#/components/responses/Error-401' + '403': + $ref: '#/components/responses/Error-403' + '404': + $ref: '#/components/responses/Error-404' + + /projects/{projectId}/sharing-users: + post: + tags: + - projects + summary: Add users into sharing users of project + description: Add the specified users into the sharing users of the project. + operationId: addProjectSharingUsers + parameters: + - name: projectId + in: path + description: Project Id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SharingUsersAddRequest' + responses: + '200': + $ref: '#/components/responses/sharing-users' + '400': + $ref: '#/components/responses/Error-400' + '401': + $ref: '#/components/responses/Error-401' + '403': + $ref: '#/components/responses/Error-403' + '404': + $ref: '#/components/responses/Error-404' + + get: + tags: + - projects + summary: Get sharing users of project + description: Get the sharing groups of the project + operationId: getProjectSharingUsers + parameters: + - name: projectId + in: path + description: Project Id + required: true + schema: + type: string + responses: + '200': + $ref: '#/components/responses/sharing-users' + '400': + $ref: '#/components/responses/Error-400' + '401': + $ref: '#/components/responses/Error-401' + '403': + $ref: '#/components/responses/Error-403' + '404': + $ref: '#/components/responses/Error-404' + + delete: + tags: + - projects + summary: Remove users from sharing users of project + description: Remove the specified users from the sharing users of the project. + operationId: removeProjectSharingUsers + parameters: + - name: projectId + in: path + description: Project Id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SharingUsersRemoveRequest' + responses: + '204': + description: Project sharing users removed successfully, no content in response body + '400': + $ref: '#/components/responses/Error-400' + '401': + $ref: '#/components/responses/Error-401' + '403': + $ref: '#/components/responses/Error-403' + '404': + $ref: '#/components/responses/Error-404' + + /projects/{projectId}/team: + post: + tags: + - projects + summary: Invite users into project team + description: Invite the specified users into the project team. + operationId: inviteProjectTeamMembers + parameters: + - name: projectId + in: path + description: Project Id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/TeamMembersInviteRequest' + responses: + '200': + $ref: '#/components/responses/team-members' + '400': + $ref: '#/components/responses/Error-400' + '401': + $ref: '#/components/responses/Error-401' + '403': + $ref: '#/components/responses/Error-403' + '404': + $ref: '#/components/responses/Error-404' + + get: + tags: + - projects + summary: Get the team members of the project + description: Get the team members of the project + operationId: getProjectTeamMembers + parameters: + - name: projectId + in: path + description: Project Id + required: true + schema: + type: string + responses: + '200': + $ref: '#/components/responses/team-members' + '400': + $ref: '#/components/responses/Error-400' + '401': + $ref: '#/components/responses/Error-401' + '403': + $ref: '#/components/responses/Error-403' + '404': + $ref: '#/components/responses/Error-404' + + delete: + tags: + - projects + summary: Remove users from project team. + description: Remove the specified users from the project team. + operationId: removeProjectTeamMembers + parameters: + - name: projectId + in: path + description: Project Id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/TeamMembersRemoveRequest' + responses: + '204': + description: Project sharing users removed successfully, no content in response body + '400': + $ref: '#/components/responses/Error-400' + '401': + $ref: '#/components/responses/Error-401' + '403': + $ref: '#/components/responses/Error-403' + '404': + $ref: '#/components/responses/Error-404' + + /projects/{projectId}/team/{userId}: + delete: + tags: + - projects + summary: Remove a user from project team + description: Remove a specified user from the project team. + operationId: removeProjectTeamMember + parameters: + - name: projectId + in: path + description: Project Id + required: true + schema: + type: string + - name: userId + in: path + description: User Id + required: true + schema: + type: string + responses: + '204': + description: Project sharing user removed successfully, no content in response body + '400': + $ref: '#/components/responses/Error-400' + '401': + $ref: '#/components/responses/Error-401' + '403': + $ref: '#/components/responses/Error-403' + '404': + $ref: '#/components/responses/Error-404' + +components: + parameters: + projectId: + name: projectId + in: path + description: Project Id + required: true + schema: + type: string + format: uuid + pattern: '^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-4[a-fA-F0-9]{3}-[89abAB][a-fA-F0-9]{3}-[a-fA-F0-9]{12}' + example: e48b3e22-d6ad-4c81-aa5e-603776d22b4d + jobId: + name: jobId + in: path + description: Job Id of project creation task + required: true + schema: + type: string + minLength: 1 + maxLength: 20 + example: '123' + + responses: + Error-400: + description: Invalid input parameter or request body + content: + application/json: + schema: + $ref: '#/components/schemas/error' + examples: + 400 - Invalid project id: + value: + status: 400 + title: Bad Request + detail: Invalid parameters + invalid-params: + - name: projectId + reason: Invalid project id + 400 - Invalid project creation request: + value: + status: 400 + title: Bad Request + detail: Invalid parameters + invalid-params: + - name: name + reason: Invalid project name + - name: templateId + reason: Invalid project template id + - name: templateVersion + reason: Invalid project template version + 400 - Invalid project owner change request: + value: + status: 400 + title: Bad Request + detail: Invalid parameters + invalid-params: + - name: userId + reason: Invalid project owner user id + - name: groupId + reason: Invalid project owner group id + 400 - Invalid project team member user: + value: + status: 400 + title: Bad Request + detail: Invalid parameters + invalid-params: + - name: userId + reason: Invalid project team member user id + 400 - Invalid project share group: + value: + status: 400 + title: Bad Request + detail: Invalid parameters + invalid-params: + - name: groupId + reason: Invalid project share group id + Error-401: + description: Authentication information missing or invalid + content: + application/json: + schema: + $ref: '#/components/schemas/error' + examples: + 401 - Unauthorized: + value: + status: 401 + title: Unauthorized + detail: Authentication information missing or invalid + Error-403: + description: No permission for this operation + content: + application/json: + schema: + $ref: '#/components/schemas/error' + examples: + 403 - Forbidden: + value: + status: 403 + title: Forbidden + detail: User has no permission for this operation + Error-404: + description: Resource not found + content: + application/json: + schema: + $ref: '#/components/schemas/error' + examples: + 404 - Project not found: + value: + status: 404 + title: Not Found + detail: Project not found + 404 - Project member not found: + value: + status: 404 + title: Not Found + detail: Project team member not found + 404 - Project share group not found: + value: + status: 404 + title: Not Found + detail: Project share group not found + + projects: + description: Project list + content: + application/json: + schema: + type: array + items: + type: object + properties: + id: + type: string + description: Project id. + example: d8e4086c-8a5c-4372-9781-03a83c87defb + name: + type: string + description: Project name. + example: App-test-1 + description: + type: string + description: Project description. + example: This project was created by Mendix Studio Pro. + ownerUserName: + type: string + description: Project owner username. + example: Peter + ownerGroupName: + type: string + description: Project owner group name. + example: IT + memberCount: + type: integer + description: Number of members in the project. + example: 2 + repositoryId: + type: string + description: Repository id. + example: '172' + repositoryName: + type: string + description: Repository name. + example: App-test-1 + repositoryURL: + type: string + description: Repository URL. + example: 'https://gitlab.com/lato/App-test-1.git' + isActive: + type: boolean + description: Indicates if the project is active. + example: true + createdDate: + type: string + description: The date and time when the project was created. + example: '2023-08-13T06:06:55.196Z' + + examples: + Project list: + value: + - id: d8e4086c-8a5c-4372-9781-03a83c87defb + name: App-test-1 + description: This project was created by Mendix Studio Pro. + ownerUserName: Peter + ownerGroupName: IT + memberCount: 2 + repositoryId: '172' + repositoryName: App-test-1 + repositoryURL: 'https://gitlab.com/lato/App-test-1.git' + isActive: true + createdDate: '2023-08-13T06:06:55.196Z' + - id: c6af395b-be22-4cfc-a473-5e30d255fb6d + name: App-test-2 + description: This project was created by Mendix Studio Pro. + ownerUserName: Peter + ownerGroupName: IT + memberCount: 2 + repositoryId: '552' + repositoryName: App-test-2 + repositoryURL: 'https://gitlab.com/org/App-test-2.git' + isActive: true + createdDate: '2023-08-13T06:06:55.211Z' + job: + description: Project creation job + content: + application/json: + schema: + type: object + properties: + id: + type: string + description: Project creation job id. + example: '123' + examples: + Project creation job: + value: + id: '123' + + project: + description: Project + content: + application/json: + schema: + $ref: '#/components/schemas/Project' + examples: + Project: + value: + id: d8e4086c-8a5c-4372-9781-03a83c87defb + name: App-test-1 + description: This project was created by Mendix Studio Pro. + ownerUserName: Peter + ownerGroupName: IT + memberCount: 2 + repositoryId: '172' + repositoryName: App-test-1 + repositoryURL: 'https://gitlab.com/lato/App-test-1.git' + isActive: true + createdDate: '2023-08-13T06:06:55.196Z' + + sharing-groups: + description: Project sharing groups + content: + application/json: + schema: + type: array + items: + type: object + properties: + id: + type: string + description: Project sharing group id + example: 205b6ffd-34cf-453e-aa45-2782d2f8cf9c + name: + type: string + description: Project sharing group name + example: Group-IT + examples: + Project sharing groups list: + value: + - id: 205b6ffd-34cf-453e-aa45-2782d2f8cf9c + name: Group-IT + - id: 10d0a84a-0c13-4efa-a09f-948e49462be9 + name: Group-QA + + sharing-users: + description: Project sharing users + content: + application/json: + schema: + type: array + items: + type: object + properties: + id: + type: string + description: Project sharing user id + example: 05ab1238-407c-478b-9dd3-05f4256702b1 + name: + type: string + description: Project sharing user name + example: Peter + email: + type: string + description: Project sharing user email + example: peter@example.com + examples: + Project sharing users list: + value: + - id: 05ab1238-407c-478b-9dd3-05f4256702b1 + name: John + email: john@example.com + - id: cf77fc69-d303-446d-b045-d2aa6fb54937 + name: Peter + email: peter@example.com + + team-members: + description: Project team members + content: + application/json: + schema: + type: array + items: + type: object + properties: + id: + type: string + description: Project team member id + example: 05ab1238-407c-478b-9dd3-05f4256702b1 + name: + type: string + description: Project team member name + example: Peter + email: + type: string + description: Project team member email + example: peter@example.com + examples: + Project team members list: + value: + - id: 05ab1238-407c-478b-9dd3-05f4256702b1 + name: John + email: john@example.com + - id: cf77fc69-d303-446d-b045-d2aa6fb54937 + name: Peter + email: peter@example.com + + schemas: + ProjectCreateRequest: + type: object + description: Project creation request + properties: + name: + type: string + description: Project name. + example: App-Test-1 + description: + type: string + description: Project description. + example: My test app 1 + group: + type: string + description: Project owner group name. + example: Group-Dev + useAppTemplate: + type: boolean + description: 'If true, app template will be used for project creation.' + example: true + appTemplate: + type: object + description: App template. + properties: + templateId: + type: string + description: (Will be depreciated) App template id that can be got via Marketplace UI or API. + example: '438' + templateVersion: + type: string + description: (Will be depreciated) App template version that can be got via Marketplace UI or API. + example: '10.24.81004' + versionUUID: + type: string + description: App template version UUID that can be got via Marketplace UI or API. + example: "344ac863-6510-46f5-b3de-06ce7e8489d3" + + required: + - name + + ProjectPatchRequest: + type: object + description: Project change request + properties: + name: + type: string + description: Project name + example: App-Test-1 + description: + type: string + description: Project description + example: My test app 1 + isActive: + type: boolean + description: Project status (Active or Inactive) + example: true + + OwnerChangeRequest: + type: object + title: OwnerChangeRequest + description: Project owner change request + properties: + userId: + type: string + description: Project owner user id. + example: 759bdc29-7a1c-4a5e-96a8-b44b2876b9e9 + groupId: + type: string + description: Project owner group id + example: 4ca3f8ff-e498-40da-b230-360716e701a6 + + SharingGroupsAddRequest: + title: SharingGroupsAddRequest + type: object + description: Project sharing group add request + properties: + groupId: + type: string + description: Project sharing group id + example: 4ca3f8ff-e498-40da-b230-360716e701a6 + + SharingGroupsRemoveRequest: + title: SharingGroupsRemoveRequest + type: object + description: Project sharing group removal request + properties: + groupId: + type: string + description: Project sharing group id + example: 4ca3f8ff-e498-40da-b230-360716e701a6 + + SharingUsersAddRequest: + title: SharingUsersAddRequest + type: object + description: Project sharing user add request + properties: + userId: + type: string + description: Project sharing user id + example: 759bdc29-7a1c-4a5e-96a8-b44b2876b9e9 + + SharingUsersRemoveRequest: + title: SharingUsersRemoveRequest + type: object + description: Project sharing user removal request + properties: + userId: + type: string + description: Project sharing user id + example: 759bdc29-7a1c-4a5e-96a8-b44b2876b9e9 + + TeamMembersInviteRequest: + title: TeamMembersInviteRequest + type: object + description: Project team members invite request + properties: + userId: + type: string + description: Project team member user id + example: 759bdc29-7a1c-4a5e-96a8-b44b2876b9e9 + directRole: + type: string + description: 'Direct role assigned to the team member, such as "Developer", "Operator", etc.' + example: Developer + + TeamMembersRemoveRequest: + title: TeamMembersRemoveRequest + type: object + description: Project team members removal request + properties: + userId: + type: string + description: Project team member user id + example: 759bdc29-7a1c-4a5e-96a8-b44b2876b9e9 + + Project: + type: object + description: Project + properties: + id: + type: string + description: Project id. + example: d8e4086c-8a5c-4372-9781-03a83c87defb + name: + type: string + description: Project name. + example: App-test-1 + description: + type: string + description: Project description. + example: This project was created by Mendix Studio Pro. + ownerUserName: + type: string + description: Project owner's username. + example: Peter + ownerGroupName: + type: string + description: Project owner's group name. + example: IT + memberCount: + type: integer + description: Number of members in the project. + example: 2 + repositoryId: + type: string + description: Repository id. + example: '172' + repositoryName: + type: string + description: Repository name. + example: App-test-1 + repositoryURL: + type: string + description: Repository URL. + example: 'https://gitlab.com/lato/App-test-1.git' + isActive: + type: boolean + description: Indicates if the project is active. + example: true + createdDate: + type: string + description: Date when the project was created. + example: '2023-08-13T06:06:55.196Z' + + error: + type: object + description: Error response + properties: + status: + type: integer + description: Response status code. + example: 400 + title: + type: string + description: 'A short, human-readable summary of the problem type.' + example: Bad Request + detail: + type: string + description: A human-readable explanation specific to this occurrence of the problem. + example: Please see invalid-params list + invalid-params: + type: array + description: "(Optional) JSON list List of name, reason keys for invalid attribute values.\r\n" + items: + type: object + properties: + name: + type: string + description: "Parameter name.\r\n" + example: name + reason: + type: string + description: "Reason for error.\r\n" + example: Project name can not be empty + required: + - status + - title + - detail + + securitySchemes: + basicAuth: + type: http + scheme: basic + mxtoken: + type: apiKey + name: Authorization + in: header +security: + - basicAuth: [] + - mxtoken: [] +tags: + - name: projects + description: 'For managing Project app, team members, sharing users and sharing groups access' \ No newline at end of file diff --git a/static/openapi-spec/openapi-user.yaml b/static/openapi-spec/openapi-user-v1.yaml similarity index 100% rename from static/openapi-spec/openapi-user.yaml rename to static/openapi-spec/openapi-user-v1.yaml