{
  "openapi": "3.0.4",
  "info": {
    "title": "Q2.Portal.Web.Server",
    "version": "1.0"
  },
  "paths": {
    "/api/v1/admin/platform/environments": {
      "get": {
        "tags": [
          "AdminPlatformEnvironment"
        ],
        "summary": "Get all Environments",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Optional environment class filter (e.g., \"AwsSandboxEnvironment\")",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/admin/platform/environments/relationships/search": {
      "get": {
        "tags": [
          "AdminPlatformEnvironment"
        ],
        "summary": "Create a role scope.",
        "parameters": [
          {
            "name": "environmentId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/admin/platform/environments/{environmentId}/relationship/company/{companyId}": {
      "post": {
        "tags": [
          "AdminPlatformEnvironment"
        ],
        "summary": "Create a role scope.",
        "parameters": [
          {
            "name": "environmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "companyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "claimType",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/CompanyEnvironmentClaimTypes"
            }
          },
          {
            "name": "fullAccess",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "AdminPlatformEnvironment"
        ],
        "summary": "Delete a role scope.",
        "parameters": [
          {
            "name": "environmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "companyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "claimType",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/CompanyEnvironmentClaimTypes"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/antiforgery/token": {
      "get": {
        "tags": [
          "Antiforgery"
        ],
        "summary": "Gets an antiforgery token for the current user session.\nThis endpoint is used by Blazor WASM to obtain tokens for state-changing operations.\nThe token is both stored in a cookie and returned in the response for use in request headers.",
        "responses": {
          "200": {
            "description": "Returns the antiforgery token"
          }
        }
      }
    },
    "/api/v1/marketplace/apps/{appId}/extensions": {
      "get": {
        "tags": [
          "AppExtensions"
        ],
        "summary": "Gets all extension associations for an app",
        "parameters": [
          {
            "name": "appId",
            "in": "path",
            "description": "The app ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "AppExtensions"
        ],
        "summary": "Creates a new extension association for an app",
        "parameters": [
          {
            "name": "appId",
            "in": "path",
            "description": "The app ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "The extension association request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AppAssociationRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AppAssociationRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AppAssociationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/marketplace/apps/{appId}/extensions/{associationId}": {
      "patch": {
        "tags": [
          "AppExtensions"
        ],
        "summary": "Updates an existing extension association (AddToNav property only)",
        "parameters": [
          {
            "name": "appId",
            "in": "path",
            "description": "The app ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "associationId",
            "in": "path",
            "description": "The extension association ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "The extension association update request (only AddToNav is updated)",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AppAssociationRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AppAssociationRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AppAssociationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "AppExtensions"
        ],
        "summary": "Deletes an extension association",
        "parameters": [
          {
            "name": "appId",
            "in": "path",
            "description": "The app ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "associationId",
            "in": "path",
            "description": "The extension association ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/applications/company/{companyId}": {
      "get": {
        "tags": [
          "Applications"
        ],
        "summary": "Gets applications for a company, optionally filtered by search term",
        "parameters": [
          {
            "name": "companyId",
            "in": "path",
            "description": "The company ID to get applications for",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "description": "Optional search term to filter applications by name",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of results to return (default 50)",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/applications/company/{companyId}/usage-tokens": {
      "get": {
        "tags": [
          "Applications"
        ],
        "summary": "Gets usage token scopes for a company",
        "parameters": [
          {
            "name": "companyId",
            "in": "path",
            "description": "The company ID to get usage tokens for",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/applications/{id}/environment/scopes": {
      "get": {
        "tags": [
          "Applications"
        ],
        "summary": "Retrieves paginated available environment scopes for an application.",
        "description": "Sample request:\n            \nGET /api/v1/applications/{id}/environment/scopes?search={search}&limit={limit}&offset={offset}",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The id for the application",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "description": "search for scopes based off this string",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "The amount of scopes to return",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "The offset of scopes to return",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/applications/{id}/environment/scope/{scopeName}": {
      "put": {
        "tags": [
          "Applications"
        ],
        "summary": "Adds a particular environment scope to an application.",
        "description": "Sample request:\n            \nPUT /api/v1/applications/{id}/environment/scopes/{scopeName}",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "the id for the application",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scopeName",
            "in": "path",
            "description": "the environment scope name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Applications"
        ],
        "summary": "removes a particular environment scope from an application.",
        "description": "Sample request:\n            \nDELETE /api/v1/applications/{id}/environment/scopes/{scopeName}",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "the id for the application",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scopeName",
            "in": "path",
            "description": "the environment scope name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/applications/{id}/usage-token/scopes": {
      "get": {
        "tags": [
          "Applications"
        ],
        "summary": "Retrieve paginated available usage token scopes for an application.",
        "description": "Sample request:\n            \nGET /api/v1/applications/{id}/usage-token/scopes?search={search}&limit={limit}&offset={offset}",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The id for the application",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "description": "search for scopes based off this string",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "The amount of scopes to return",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "The offset of scopes to return",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/applications/{id}/usage-token/scope/{scopeName}": {
      "put": {
        "tags": [
          "Applications"
        ],
        "summary": "Adds a particular usage token scope to an application.",
        "description": "Sample request:\n            \nPUT /api/v1/applications/{id}/usage-token/scopes/{scopeName}",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "the id for the application",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scopeName",
            "in": "path",
            "description": "the usage token scope name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Applications"
        ],
        "summary": "removes a particular usage token scope from an application.",
        "description": "Sample request:\n            \nDELETE /api/v1/applications/{id}/usage-token/scopes/{scopeName}",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "the id for the application",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scopeName",
            "in": "path",
            "description": "the usage token scope name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/applications/{id}/permission/scopes": {
      "get": {
        "tags": [
          "Applications"
        ],
        "summary": "Retrieve paginated available permission scopes for an application.",
        "description": "Sample request:\n            \nGET /api/v1/applications/{id}/permission/scopes?search={search}&limit={limit}&offset={offset}",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The id for the application",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "description": "search for scopes based off this string",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "The amount of scopes to return",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "The offset of scopes to return",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/applications/{id}/permission/scope/{scopeName}": {
      "put": {
        "tags": [
          "Applications"
        ],
        "summary": "Adds a particular permission token scope to an application.",
        "description": "Sample request:\n            \nPUT /api/v1/applications/{id}/permission/scopes/{scopeName}",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "the id for the application",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scopeName",
            "in": "path",
            "description": "the permission scope name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Applications"
        ],
        "summary": "removes a particular permission scope from an application.",
        "description": "Sample request:\n            \nDELETE /api/v1/applications/{id}/permission/scopes/{scopeName}",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "the id for the application",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scopeName",
            "in": "path",
            "description": "the permission scope name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/marketplace/orders/{id}/comments/{commentId}": {
      "get": {
        "tags": [
          "AppOrders"
        ],
        "summary": "Gets an app order comment by order id and comment id.",
        "description": "Sample request:\n            \nGET /api/v1/marketplace/orders/{order-id}/comments/{comment-id}",
        "operationId": "GetCommentAsync",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The app order id.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "commentId",
            "in": "path",
            "description": "The comment id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/marketplace/orders/{id}/comments": {
      "post": {
        "tags": [
          "AppOrders"
        ],
        "summary": "Adds a comment to an app order.",
        "description": "Sample request:\n            \nPOST /api/v1/marketplace/orders/{order-id}/comments\n{\n    \"comment\": \"This is a comment\",\n    \"public\": true\n}",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The app order id.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "The comment to be added to the app order.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AppOrderComment"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AppOrderComment"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AppOrderComment"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/admin/aws/sns": {
      "post": {
        "tags": [
          "AwsSns"
        ],
        "summary": "POST: /api/v1.0/admin/aws/sns\n            \nValidates the message signature and if valid, and it's a bounce notification, disables the user.",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Message"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Message"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Message"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/caliper-api/usage": {
      "get": {
        "tags": [
          "CaliperAPI"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CaliperApiUsage"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CaliperApiUsage"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CaliperApiUsage"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/caliper-api/activity/{id}": {
      "get": {
        "tags": [
          "CaliperApiActivity"
        ],
        "summary": "Gets a Caliper API activity request object",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Primary key id for the activity request.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "CaliperApiActivity"
        ],
        "summary": "Updates a given activity request with a new status and url.",
        "description": "Sample request:\n            \n    PUT /api/v1/caliper-api/activity/{id}\n    {\n       \"status\": 2, // Created = 0, Pending = 1, Completed = 2, Error = 3\n       \"url\": \"https://cdn.q2developer.com/tests/1cddb57e-2ac8-45e4-a2a4-fcd69fc3cf41.txt\",\n       \"expiration\": \"2021-08-19T19:30:50.602Z\",\n       \"message\": \"string\"\n    }",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Primary key for the activity request",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiActivityRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiActivityRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ApiActivityRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/caliper-api/activity": {
      "post": {
        "tags": [
          "CaliperApiActivity"
        ],
        "summary": "Creates a new Caliper API activity request",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateActivityRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateActivityRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateActivityRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/marketplace/catalog/{id}": {
      "get": {
        "tags": [
          "Catalog"
        ],
        "summary": "Gets a single catalog app",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Primary key id for the App.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/marketplace/catalog/{slug}": {
      "get": {
        "tags": [
          "Catalog"
        ],
        "summary": "Gets a single catalog app",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "description": "The slug for an App.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/marketplace/catalog": {
      "get": {
        "tags": [
          "Catalog"
        ],
        "summary": "Gets all catalog apps.",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/community/{appId}": {
      "put": {
        "tags": [
          "Community"
        ],
        "summary": "Updates a community app.",
        "description": "Sample request:\n            \n    PUT /api/v1/community/{appid}\n    {\n       \"MoreDetailsContent\": \"Some markdown content\"\n    }",
        "parameters": [
          {
            "name": "appId",
            "in": "path",
            "description": "The id of the community app to update.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "The updated community app.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommunityApp"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CommunityApp"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CommunityApp"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/community/{appid}/rating": {
      "put": {
        "tags": [
          "Community"
        ],
        "summary": "A User is rating a particular community app.",
        "description": "Sample request:\n            \n    PUT /api/v1/community/{appid}/rating\n    {\n       \"rating\": 5\n    }",
        "parameters": [
          {
            "name": "appId",
            "in": "path",
            "description": "The id for the particular community app.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommunityUserRatingRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CommunityUserRatingRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CommunityUserRatingRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/community/{appId}/content": {
      "post": {
        "tags": [
          "Community"
        ],
        "summary": "Adds a new content section to a community app.",
        "description": "Sample request:\n            \n    POST /api/v1/community/{appid}/content\n    {\n       \"Order\": 1,\n       \"Title\": \"Some Title\",\n       \"Content\": \"Some markdown content\"\n    }",
        "parameters": [
          {
            "name": "appId",
            "in": "path",
            "description": "The id for the particular community app.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommunityAppContent"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CommunityAppContent"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CommunityAppContent"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/community/{appId}/content/{communityAppContentId}": {
      "delete": {
        "tags": [
          "Community"
        ],
        "summary": "Deletes a content section for a community app.",
        "description": "Sample request:\n            \n    DELETE /api/v1/community/{appid}/content/{communityAppContentId}",
        "parameters": [
          {
            "name": "appId",
            "in": "path",
            "description": "The id for the particular community app.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "communityAppContentId",
            "in": "path",
            "description": "The app content id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "Community"
        ],
        "summary": "Updates a content section for a community app.",
        "description": "Sample request:\n            \n    PUT /api/v1/community/{appid}/content/{communityAppContentId}\n    {\n       \"Order\": 1,\n       \"Title\": \"Some Title\",\n       \"Content\": \"Some new markdown content\"\n    }",
        "parameters": [
          {
            "name": "appId",
            "in": "path",
            "description": "The id for the particular community app.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "communityAppContentId",
            "in": "path",
            "description": "The app content id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommunityAppContent"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CommunityAppContent"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CommunityAppContent"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/community/{appId}/content/{communityAppContentId}/document": {
      "post": {
        "tags": [
          "Community"
        ],
        "summary": "Adds a document to a content section for a community app.",
        "description": "Sample request:\n            \n    POST /api/v1/community/{appid}/content/{communityAppContentId}/document",
        "parameters": [
          {
            "name": "appId",
            "in": "path",
            "description": "The id for the particular community app.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "communityAppContentId",
            "in": "path",
            "description": "The app content id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "description": "",
                    "format": "binary"
                  }
                }
              },
              "encoding": {
                "file": {
                  "style": "form"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/admin/companies": {
      "get": {
        "tags": [
          "Companies"
        ],
        "parameters": [
          {
            "name": "groupPath",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/admin/companies/{company_name}/claims": {
      "post": {
        "tags": [
          "Companies"
        ],
        "parameters": [
          {
            "name": "company_name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiCompanyRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiCompanyRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ApiCompanyRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/admin/companies/{id}/assignedscopes": {
      "get": {
        "tags": [
          "Companies"
        ],
        "summary": "Route to search assigned Portal scopes.",
        "description": "Returns all scopes",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/admin/companies/{id}/scopes": {
      "post": {
        "tags": [
          "Companies"
        ],
        "summary": "Create a role scope.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scopeName",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Companies"
        ],
        "summary": "Delete a role scope.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scopeName",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/organization/members/{memberId}/container/status": {
      "get": {
        "tags": [
          "ContainerDeployments"
        ],
        "summary": "Gets the current container status for the member.",
        "parameters": [
          {
            "name": "memberId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/organization/members/{memberId}/container/provision": {
      "post": {
        "tags": [
          "ContainerDeployments"
        ],
        "summary": "Provisions (first time) or redeploys a container for the member. Returns\n409 with the in-flight deployment when the platform reports one already\nin progress, or 502 when the platform rejects the deploy outright.",
        "parameters": [
          {
            "name": "memberId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/organization/members/{memberId}/container/rollback": {
      "post": {
        "tags": [
          "ContainerDeployments"
        ],
        "summary": "Rolls the member's container back to its previous image tag. The tag is\nderived server-side from the platform target; the client supplies none.\nReturns 409 when a deploy is already in progress, or 502 when the platform\nrejects the rollback (including when no previous tag exists).",
        "parameters": [
          {
            "name": "memberId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/organization/members/{memberId}/container": {
      "delete": {
        "tags": [
          "ContainerDeployments"
        ],
        "summary": "Destroys the member's current Q2 Code container.",
        "parameters": [
          {
            "name": "memberId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/organization/members/{memberId}/container/deployments/{deploymentId}/status": {
      "get": {
        "tags": [
          "ContainerDeployments"
        ],
        "summary": "Gets the latest status of an in-flight deployment (for long polling).",
        "parameters": [
          {
            "name": "memberId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deploymentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/marketplace/{slug}/end-user/screenshot": {
      "post": {
        "tags": [
          "EndUser"
        ],
        "summary": "Adds a document to a content section for a community app.",
        "description": "Sample request:\n            \n    POST /api/v1/marketplace/{appSlug}/end-user/screenshot",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "description": "The slug for the particular app.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "description": "The screenshot to upload",
                    "format": "binary"
                  }
                }
              },
              "encoding": {
                "file": {
                  "style": "form"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/platform/installs/extensions/{extensionInstallRequestId}": {
      "get": {
        "tags": [
          "ExtensionInstall"
        ],
        "summary": "Gets an extension install request object.",
        "description": "Sample request:\n            \nGET /api/v1/platform/installs/extensions/{extension-install-request-id}",
        "parameters": [
          {
            "name": "extensionInstallRequestId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "ExtensionInstall"
        ],
        "summary": "Updates an extension install request with a new status, message and exception.",
        "description": "Sample request:\n            \nPUT /api/v1/platform/installs/extensions/{extension-install-request-id}\n{\n   \"State\": 2, // Created = 0, Pending = 1, Completed = 2, Error = 3,\n   \"Message\": \"string\",\n   \"Exception\": \"string\"\n }",
        "parameters": [
          {
            "name": "extensionInstallRequestId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExtensionInstallRequestUpdate"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ExtensionInstallRequestUpdate"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ExtensionInstallRequestUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/gitlab/projects": {
      "get": {
        "tags": [
          "GitLab"
        ],
        "summary": "Route to Return Projects a user has access to.",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/gitlab/merge-requests/{gitLabProjectId}": {
      "get": {
        "tags": [
          "GitLab"
        ],
        "summary": "Gets the environments a user has access to.",
        "parameters": [
          {
            "name": "gitLabProjectId",
            "in": "path",
            "description": "The type of environments",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/jira/attachment/{id}": {
      "get": {
        "tags": [
          "Jira"
        ],
        "summary": "Gets a Jira attachment",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The Jira issue key",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "attachmentId",
            "in": "query",
            "description": "The Jira attachment id",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/jira/ticket/{id}/comment/{commentId}": {
      "post": {
        "tags": [
          "Jira"
        ],
        "summary": "Updates a Jira Comment",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ticket id to update",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "commentId",
            "in": "path",
            "description": "The ticket comment id to update",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The comment to update to.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JiraIssueComment"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JiraIssueComment"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JiraIssueComment"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/jirawebhook": {
      "post": {
        "tags": [
          "JiraWebhook"
        ],
        "parameters": [
          {
            "name": "issueId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "api-version",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": { }
            },
            "text/json": {
              "schema": { }
            },
            "application/*+json": {
              "schema": { }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/jirawebhook": {
      "post": {
        "tags": [
          "JiraWebhook"
        ],
        "parameters": [
          {
            "name": "issueId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": { }
            },
            "text/json": {
              "schema": { }
            },
            "application/*+json": {
              "schema": { }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/jirawebhook/{id}": {
      "get": {
        "tags": [
          "JiraWebhook"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "api-version",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/jirawebhook/{id}": {
      "get": {
        "tags": [
          "JiraWebhook"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/admin/log/{id}": {
      "get": {
        "tags": [
          "Log"
        ],
        "summary": "Gets a log request object, and surfaces a nextAction hint for API callers\n(download | poll_again | failed | expired). Stale-pending sweep is handled\nby Q2.Portal.Core.Interfaces.ISdkLogService on list paths, not here.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Primary key id for the log request.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "Log"
        ],
        "summary": "Updates a given log request with a new status and url. Called by Caliper\nwhen the async log-pull finishes.",
        "description": "Sample request:\n            \n    PUT /api/v1/admin/log/{id}\n    {\n       \"status\": 2, // Created = 0, Pending = 1, Completed = 2, Error = 3\n       \"url\": \"https://cdn.q2developer.com/tests/1cddb57e-2ac8-45e4-a2a4-fcd69fc3cf41.txt\",\n       \"expiration\": \"2021-08-19T19:30:50.602Z\",\n       \"message\": \"string\"\n    }",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiLogRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiLogRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ApiLogRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/admin/log": {
      "post": {
        "tags": [
          "Log"
        ],
        "summary": "Submit an async log pull request for the caller's company. Returns the\nsame response shape as M:Q2.Portal.Web.Server.Controllers.API.LogController.GetLogRequest(System.Int32) for immediate polling.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLogRequestDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLogRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLogRequestDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/datacenter/templates": {
      "get": {
        "tags": [
          "OrcaTemplates"
        ],
        "summary": "Get all base templates",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/datacenter/templates/{templateId}": {
      "get": {
        "tags": [
          "OrcaTemplates"
        ],
        "summary": "Get a specific template by ID",
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/datacenter/templates/{templateId}/yaml": {
      "get": {
        "tags": [
          "OrcaTemplates"
        ],
        "summary": "Get base template YAML content from Orca",
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "OrcaTemplates"
        ],
        "summary": "Save base template YAML content to Orca",
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveTemplateYamlRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveTemplateYamlRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SaveTemplateYamlRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/datacenter/templates/yaml/validate": {
      "post": {
        "tags": [
          "OrcaTemplates"
        ],
        "summary": "Validate template YAML syntax and return normalized version",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateYamlRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateYamlRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateYamlRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/platform/environments/{id}": {
      "get": {
        "tags": [
          "PlatformEnvironment"
        ],
        "summary": "Gets an environment by id and company id.",
        "description": "Sample request:\n            \n   GET /api/v1.0/platform/environments/{id}",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The environment id.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/platform/environments/{id}/extensions": {
      "get": {
        "tags": [
          "PlatformEnvironment"
        ],
        "summary": "Gets an environment extensions by id for a company.",
        "description": "Sample request:\n            \n   GET /api/v1.0/platform/environments/{id}/extensions?formType={formType}",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The environment id.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "formType",
            "in": "query",
            "description": "The form type to retrieve",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/platform/environments/{id}/extensions/{extensionId}/config": {
      "put": {
        "tags": [
          "PlatformEnvironment"
        ],
        "summary": "Updates an environment extension config by by environment id and extension id for a company.",
        "description": "Sample request:\n            \n   PUT /api/v1.0/platform/environments/{id}/extensions/{extensionId}/config?formType={formType}",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The environment id.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "extensionId",
            "in": "path",
            "description": "The extension id found within the environment database.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "formType",
            "in": "query",
            "description": "The form type to update",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "JSON configuration to be stored.",
          "content": {
            "application/json": {
              "schema": { }
            },
            "text/json": {
              "schema": { }
            },
            "application/*+json": {
              "schema": { }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/platform/environments/{id}/extensions/{extensionId}/url": {
      "put": {
        "tags": [
          "PlatformEnvironment"
        ],
        "summary": "Updates an environment extension url by by environment id and extension id for a company.",
        "description": "Sample request:\n            \n   PUT /api/v1.0/platform/environments/{id}/extensions/{extensionId}/url?formType={formType}",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The environment id.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "extensionId",
            "in": "path",
            "description": "The extension id found within the environment database.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "formType",
            "in": "query",
            "description": "The form type to retrieve",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "JSON object of the url document",
          "content": {
            "application/json": {
              "schema": { }
            },
            "text/json": {
              "schema": { }
            },
            "application/*+json": {
              "schema": { }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/platform/environments": {
      "get": {
        "tags": [
          "PlatformEnvironment"
        ],
        "summary": "Gets the environments a user has access to.",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "The type of environments",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "description": "The user id",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "email",
            "in": "query",
            "description": "The user email",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "description": "The company id (requires admin permissions to view other companies)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "claimType",
            "in": "query",
            "description": "Optional claim type filter (string name or integer value). If not specified, returns all environments.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/platform/environments/customer_keys": {
      "get": {
        "tags": [
          "PlatformEnvironment"
        ],
        "summary": "Gets the environment customer keys (PlatformEnvironmentIds) a user has access to.",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "The type of environments",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "description": "The user id",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "email",
            "in": "query",
            "description": "The user email",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "companyId",
            "in": "query",
            "description": "The company id (requires admin permissions to view other companies)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "claimType",
            "in": "query",
            "description": "Optional claim type filter (string name or integer value). If not specified, returns all environments.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/platform/environments/{id}/credentials": {
      "get": {
        "tags": [
          "PlatformEnvironment"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/platform/environments/{id}/credentials/refresh": {
      "post": {
        "tags": [
          "PlatformEnvironment"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/platform/services": {
      "get": {
        "tags": [
          "PlatformServices"
        ],
        "summary": "Gets the services for a particular company.",
        "description": "Sample request:\n            \n   GET /api/v1.0/platform/services",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/platform/services/{id}": {
      "get": {
        "tags": [
          "PlatformServices"
        ],
        "summary": "Gets a service",
        "description": "Sample request:\n            \n   GET /api/v1.0/platform/services/{id}",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The service id.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/platform/services/{id}/details": {
      "get": {
        "tags": [
          "PlatformServices"
        ],
        "summary": "Gets the details for a particular service.",
        "description": "Sample request:\n            \n   GET /api/v1.0/platform/services/{id}/details",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The service id.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/platform/services/{serviceId}/extensions/{extensionName}": {
      "get": {
        "tags": [
          "PlatformServices"
        ],
        "summary": "Gets extension details from the Caliper API",
        "description": "Sample request:\n            \n   GET /api/v1.0/platform/services/{serviceId}/extensions/{extensionName}",
        "parameters": [
          {
            "name": "serviceId",
            "in": "path",
            "description": "The service id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "extensionName",
            "in": "path",
            "description": "The extension name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/platform/services/{id}/log-level": {
      "get": {
        "tags": [
          "PlatformServices"
        ],
        "summary": "Gets the log level for a particular service.",
        "description": "Sample request:\n            \n   GET /api/v1.0/platform/services/{id}/log-level",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The service id.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/admin/roles": {
      "get": {
        "tags": [
          "Roles"
        ],
        "summary": "Route to get Portal roles.",
        "description": "Returns all roles",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/admin/roles/{id}/assignedscopes": {
      "get": {
        "tags": [
          "Roles"
        ],
        "summary": "Route to search assigned Portal scopes.",
        "description": "Returns all scopes",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/admin/roles/{id}/scopes": {
      "get": {
        "tags": [
          "Roles"
        ],
        "summary": "Get role scopes.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Roles"
        ],
        "summary": "Create a role scope.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scopeName",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Roles"
        ],
        "summary": "Delete a role scope.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scopeName",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/admin/roles/{id}/scopes/{scopeId}": {
      "post": {
        "tags": [
          "Roles"
        ],
        "summary": "Create a role scope.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scopeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Roles"
        ],
        "summary": "Delete a role scope.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scopeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/salesforcewebhook": {
      "post": {
        "tags": [
          "SalesforceWebhook"
        ],
        "parameters": [
          {
            "name": "salesforceObject",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "salesforceObjectId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": { }
            },
            "text/json": {
              "schema": { }
            },
            "application/*+json": {
              "schema": { }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/sandbox/config": {
      "get": {
        "tags": [
          "Sandbox"
        ],
        "summary": "Gets the development environments and Gitlab projects a user has access to.",
        "description": "Sample request:\n            \n   GET /api/v1.0/sandbox/config",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/SandboxConfig"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SandboxConfig"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/SandboxConfig"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/sandbox/environments": {
      "get": {
        "tags": [
          "Sandbox"
        ],
        "summary": "Gets the development environments a user has access to.",
        "description": "Sample request:\n            \n   GET /api/v1.0/sandbox/environments",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/SandboxConfig"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SandboxConfig"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/SandboxConfig"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/sandbox/projects": {
      "get": {
        "tags": [
          "Sandbox"
        ],
        "summary": "Gets the Gitlab projects a user has access to.",
        "description": "Sample request:\n            \n   GET /api/v1.0/sandbox/projects",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/SandboxConfig"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SandboxConfig"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/SandboxConfig"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/datacenter/sandboxes/uux-versions": {
      "get": {
        "tags": [
          "SandboxActions"
        ],
        "summary": "Get available UUX versions from database (active versions only)",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/datacenter/sandboxes/base-templates": {
      "get": {
        "tags": [
          "SandboxActions"
        ],
        "summary": "Get available base templates from database (active templates only)",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/datacenter/sandboxes/{environmentId}/status": {
      "get": {
        "tags": [
          "SandboxActions"
        ],
        "summary": "Get current deployment status for an environment",
        "parameters": [
          {
            "name": "environmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/datacenter/sandboxes/{environmentId}/actions": {
      "get": {
        "tags": [
          "SandboxActions"
        ],
        "summary": "Get action history for an environment",
        "parameters": [
          {
            "name": "environmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/datacenter/sandboxes/{environmentId}/actions/{actionId}": {
      "get": {
        "tags": [
          "SandboxActions"
        ],
        "summary": "Get status of a specific action for an environment",
        "parameters": [
          {
            "name": "environmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/datacenter/sandboxes/{environmentId}/deploy": {
      "post": {
        "tags": [
          "SandboxActions"
        ],
        "summary": "Deploy/Build a new sandbox",
        "parameters": [
          {
            "name": "environmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SandboxActionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SandboxActionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SandboxActionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/datacenter/sandboxes/{environmentId}/update": {
      "post": {
        "tags": [
          "SandboxActions"
        ],
        "summary": "Update sandbox UUX version",
        "parameters": [
          {
            "name": "environmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SandboxActionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SandboxActionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SandboxActionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/datacenter/sandboxes/{environmentId}/redeploy": {
      "post": {
        "tags": [
          "SandboxActions"
        ],
        "summary": "Redeploy sandbox (pick up base template changes)",
        "parameters": [
          {
            "name": "environmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SandboxActionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SandboxActionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SandboxActionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/datacenter/sandboxes/{environmentId}/delete": {
      "post": {
        "tags": [
          "SandboxActions"
        ],
        "summary": "Delete sandbox",
        "parameters": [
          {
            "name": "environmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/datacenter/sandboxes/{environmentId}/yaml": {
      "get": {
        "tags": [
          "SandboxActions"
        ],
        "summary": "Get current stack YAML from Orca",
        "parameters": [
          {
            "name": "environmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "SandboxActions"
        ],
        "summary": "Save stack YAML to Orca and deploy the changes",
        "parameters": [
          {
            "name": "environmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveSandboxYamlRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveSandboxYamlRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SaveSandboxYamlRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/datacenter/sandboxes/yaml/validate": {
      "post": {
        "tags": [
          "SandboxActions"
        ],
        "summary": "Validate YAML syntax and return normalized version",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateYamlRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateYamlRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateYamlRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/admin/scopes": {
      "get": {
        "tags": [
          "Scopes"
        ],
        "summary": "Route to search Portal scopes.",
        "description": "Returns all scopes",
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "description": "Substring to search for scopes that have a similar name",
            "schema": {
              "type": "string",
              "default": ""
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Scopes"
        ],
        "summary": "Create a scope.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiScopeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiScopeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ApiScopeRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/admin/scopes/{name}": {
      "get": {
        "tags": [
          "Scopes"
        ],
        "summary": "Get scope by name.",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "default": ""
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "Scopes"
        ],
        "summary": "Update scope.",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiScopeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiScopeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ApiScopeRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Scopes"
        ],
        "summary": "Delete a scope.",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/admin/status/services": {
      "get": {
        "tags": [
          "Status"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/supporthours/summary": {
      "get": {
        "tags": [
          "SupportHours"
        ],
        "summary": "Gets the support hours summary for the current user's company",
        "parameters": [
          {
            "name": "year",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/vault/add": {
      "post": {
        "tags": [
          "Vault"
        ],
        "summary": "Uploads a JSON secret to Vault for the user's company",
        "description": "Sample request:\n            \n   POST /api/v1.0/vault/add?file_name=my-config\n   { \"key\": \"value\" }",
        "parameters": [
          {
            "name": "file_name",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": { }
            },
            "text/json": {
              "schema": { }
            },
            "application/*+json": {
              "schema": { }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/version": {
      "get": {
        "tags": [
          "Version"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ApiActivityRequest": {
        "required": [
          "status"
        ],
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/CaliperApiActivityState"
          },
          "url": {
            "type": "string",
            "nullable": true
          },
          "expiration": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "message": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ApiClaimRequest": {
        "type": "object",
        "properties": {
          "claimType": {
            "type": "string",
            "nullable": true
          },
          "claimValue": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ApiCompanyRequest": {
        "required": [
          "databasePort",
          "domains",
          "environmentName",
          "terms"
        ],
        "type": "object",
        "properties": {
          "gitlabGroup": {
            "type": "string",
            "nullable": true
          },
          "environmentName": {
            "minLength": 1,
            "type": "string"
          },
          "databasePort": {
            "minLength": 1,
            "type": "string"
          },
          "domains": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "terms": {
            "minLength": 1,
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "ApiLogRequest": {
        "required": [
          "status"
        ],
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/LogState"
          },
          "url": {
            "type": "string",
            "nullable": true
          },
          "expiration": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "message": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ApiScopeRequest": {
        "required": [
          "description",
          "displayName",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "minLength": 1,
            "type": "string"
          },
          "description": {
            "minLength": 1,
            "type": "string"
          },
          "displayName": {
            "minLength": 1,
            "type": "string"
          },
          "resources": {
            "uniqueItems": true,
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "claims": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApiClaimRequest"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AppAssociationRequest": {
        "type": "object",
        "properties": {
          "platformServiceId": {
            "type": "string",
            "nullable": true
          },
          "extensionName": {
            "type": "string",
            "nullable": true
          },
          "addToNav": {
            "type": "boolean"
          },
          "uniqueName": {
            "type": "string",
            "nullable": true
          },
          "extensionType": {
            "$ref": "#/components/schemas/ExtensionType"
          }
        },
        "additionalProperties": false
      },
      "AppOrderComment": {
        "required": [
          "comment"
        ],
        "type": "object",
        "properties": {
          "comment": {
            "minLength": 1,
            "type": "string",
            "description": "The comment to be added to the app order."
          },
          "public": {
            "type": "boolean",
            "description": "Whether the comment should be visible to the customer."
          }
        },
        "additionalProperties": false
      },
      "ApplicationCompany": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "displayName": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "lastModified": {
            "type": "string",
            "format": "date-time"
          },
          "termsType": {
            "$ref": "#/components/schemas/TermsType"
          },
          "deploymentSchedule": {
            "type": "string",
            "nullable": true
          },
          "isPriorityCompany": {
            "type": "boolean"
          },
          "mfaRequired": {
            "type": "boolean"
          },
          "hasIntegratedServices": {
            "type": "boolean"
          },
          "salesforceAccountNumber": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "ApplicationRole": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "normalizedName": {
            "type": "string",
            "nullable": true
          },
          "concurrencyStamp": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "lastModified": {
            "type": "string",
            "format": "date-time"
          },
          "userRoles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationUserRole"
            },
            "nullable": true
          },
          "roleClaims": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationRoleClaim"
            },
            "nullable": true
          },
          "roleScopes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoleScope"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ApplicationRoleClaim": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "roleId": {
            "type": "string",
            "nullable": true
          },
          "claimType": {
            "type": "string",
            "nullable": true
          },
          "claimValue": {
            "type": "string",
            "nullable": true
          },
          "role": {
            "$ref": "#/components/schemas/ApplicationRole"
          }
        },
        "additionalProperties": false
      },
      "ApplicationUser": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "userName": {
            "type": "string",
            "nullable": true
          },
          "normalizedUserName": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "normalizedEmail": {
            "type": "string",
            "nullable": true
          },
          "emailConfirmed": {
            "type": "boolean"
          },
          "passwordHash": {
            "type": "string",
            "nullable": true
          },
          "securityStamp": {
            "type": "string",
            "nullable": true
          },
          "concurrencyStamp": {
            "type": "string",
            "nullable": true
          },
          "phoneNumber": {
            "type": "string",
            "nullable": true
          },
          "phoneNumberConfirmed": {
            "type": "boolean"
          },
          "twoFactorEnabled": {
            "type": "boolean"
          },
          "lockoutEnd": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "lockoutEnabled": {
            "type": "boolean"
          },
          "accessFailedCount": {
            "type": "integer",
            "format": "int32"
          },
          "termsDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "termsType": {
            "type": "string",
            "nullable": true
          },
          "companyId": {
            "type": "string",
            "nullable": true
          },
          "company": {
            "$ref": "#/components/schemas/ApplicationCompany"
          },
          "firstName": {
            "type": "string",
            "nullable": true
          },
          "lastName": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "website": {
            "type": "string",
            "nullable": true
          },
          "location": {
            "type": "string",
            "nullable": true
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "deletedOn": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "lastModified": {
            "type": "string",
            "format": "date-time"
          },
          "lastLogin": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "claims": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationUserClaim"
            },
            "nullable": true
          },
          "logins": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationUserLogin"
            },
            "nullable": true
          },
          "tokens": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationUserToken"
            },
            "nullable": true
          },
          "userRoles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationUserRole"
            },
            "nullable": true
          },
          "personalAccessTokens": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PersonalAccessToken"
            },
            "nullable": true
          },
          "notificationSubscriptions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NotificationSubscription"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ApplicationUserClaim": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "userId": {
            "type": "string",
            "nullable": true
          },
          "claimType": {
            "type": "string",
            "nullable": true
          },
          "claimValue": {
            "type": "string",
            "nullable": true
          },
          "user": {
            "$ref": "#/components/schemas/ApplicationUser"
          }
        },
        "additionalProperties": false
      },
      "ApplicationUserLogin": {
        "type": "object",
        "properties": {
          "loginProvider": {
            "type": "string",
            "nullable": true
          },
          "providerKey": {
            "type": "string",
            "nullable": true
          },
          "providerDisplayName": {
            "type": "string",
            "nullable": true
          },
          "userId": {
            "type": "string",
            "nullable": true
          },
          "user": {
            "$ref": "#/components/schemas/ApplicationUser"
          }
        },
        "additionalProperties": false
      },
      "ApplicationUserRole": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "nullable": true
          },
          "roleId": {
            "type": "string",
            "nullable": true
          },
          "user": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "role": {
            "$ref": "#/components/schemas/ApplicationRole"
          }
        },
        "additionalProperties": false
      },
      "ApplicationUserToken": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "nullable": true
          },
          "loginProvider": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "value": {
            "type": "string",
            "nullable": true
          },
          "user": {
            "$ref": "#/components/schemas/ApplicationUser"
          }
        },
        "additionalProperties": false
      },
      "CaliperApiActivityState": {
        "enum": [
          0,
          1,
          2,
          3
        ],
        "type": "integer",
        "format": "int32"
      },
      "CaliperApiReportFormat": {
        "enum": [
          0,
          1
        ],
        "type": "integer",
        "format": "int32"
      },
      "CaliperApiUsage": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "displayName": {
            "type": "string",
            "nullable": true
          },
          "quota": {
            "$ref": "#/components/schemas/Quota"
          },
          "throttle": {
            "$ref": "#/components/schemas/Throttle"
          }
        },
        "additionalProperties": false
      },
      "CommunityApp": {
        "type": "object",
        "properties": {
          "communityAppId": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "appLogoUrl": {
            "type": "string",
            "nullable": true
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "appState": {
            "$ref": "#/components/schemas/CommunityAppState"
          },
          "requestInfoEmail": {
            "type": "string",
            "nullable": true
          },
          "ownerUserId": {
            "type": "string",
            "nullable": true
          },
          "ownerUser": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "ownerCompanyId": {
            "type": "string",
            "nullable": true
          },
          "ownerCompany": {
            "$ref": "#/components/schemas/ApplicationCompany"
          },
          "slug": {
            "type": "string",
            "nullable": true
          },
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommunityAppContent"
            },
            "nullable": true
          },
          "moreDetailsContent": {
            "type": "string",
            "nullable": true
          },
          "ratings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommunityAppUserRating"
            },
            "nullable": true
          },
          "calculatedRating": {
            "$ref": "#/components/schemas/CommunityAppRating"
          },
          "createdOn": {
            "type": "string",
            "format": "date-time"
          },
          "createdByUserId": {
            "type": "string",
            "nullable": true
          },
          "createdBy": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "lastModifiedOn": {
            "type": "string",
            "format": "date-time"
          },
          "lastModifiedUserId": {
            "type": "string",
            "nullable": true
          },
          "lastModifiedBy": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "publishedOn": {
            "type": "string",
            "format": "date-time"
          },
          "publishedByUserId": {
            "type": "string",
            "nullable": true
          },
          "publishedBy": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "isOwnedByUser": {
            "type": "boolean",
            "readOnly": true
          },
          "ownerSlug": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "ownerDisplayName": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "CommunityAppContent": {
        "type": "object",
        "properties": {
          "communityAppContentId": {
            "type": "integer",
            "format": "int32"
          },
          "order": {
            "type": "integer",
            "format": "int32"
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "content": {
            "type": "string",
            "nullable": true
          },
          "document": {
            "$ref": "#/components/schemas/Document"
          }
        },
        "additionalProperties": false
      },
      "CommunityAppRating": {
        "type": "object",
        "properties": {
          "communityAppId": {
            "type": "integer",
            "format": "int32"
          },
          "rating": {
            "type": "number",
            "format": "double"
          },
          "count": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "CommunityAppState": {
        "enum": [
          0,
          1,
          2
        ],
        "type": "integer",
        "format": "int32"
      },
      "CommunityAppUserRating": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "nullable": true
          },
          "communityAppId": {
            "type": "integer",
            "format": "int32"
          },
          "rating": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "CommunityUserRatingRequest": {
        "required": [
          "rating"
        ],
        "type": "object",
        "properties": {
          "rating": {
            "maximum": 5,
            "minimum": 1,
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "CompanyEnvironmentClaimTypes": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5,
          6
        ],
        "type": "integer",
        "format": "int32"
      },
      "CreateActivityRequest": {
        "required": [
          "environmentType",
          "from",
          "to"
        ],
        "type": "object",
        "properties": {
          "usageToken": {
            "type": "string",
            "nullable": true
          },
          "clientId": {
            "type": "string",
            "nullable": true
          },
          "customerKey": {
            "type": "string",
            "nullable": true
          },
          "endpoint": {
            "type": "string",
            "nullable": true
          },
          "environmentType": {
            "$ref": "#/components/schemas/EnvironmentType"
          },
          "reportFormat": {
            "$ref": "#/components/schemas/CaliperApiReportFormat"
          },
          "logRefId": {
            "type": "string",
            "nullable": true
          },
          "from": {
            "type": "string",
            "format": "date-time"
          },
          "to": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "CreateLogRequestDto": {
        "required": [
          "fromUtc",
          "serviceId",
          "toUtc"
        ],
        "type": "object",
        "properties": {
          "serviceId": {
            "minLength": 1,
            "type": "string"
          },
          "environmentId": {
            "type": "string",
            "nullable": true
          },
          "fromUtc": {
            "type": "string",
            "format": "date-time"
          },
          "toUtc": {
            "type": "string",
            "format": "date-time"
          },
          "extensions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "levels": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "sdkSessions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Document": {
        "required": [
          "url"
        ],
        "type": "object",
        "properties": {
          "documentId": {
            "type": "integer",
            "format": "int32"
          },
          "url": {
            "minLength": 1,
            "type": "string"
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "lookupValue": {
            "type": "string",
            "nullable": true
          },
          "documentType": {
            "$ref": "#/components/schemas/DocumentType"
          },
          "uploadedBy": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "uploadedByUserId": {
            "type": "string",
            "nullable": true
          },
          "uploadedOn": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "stream": {
            "type": "string",
            "format": "binary",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DocumentType": {
        "enum": [
          0,
          1,
          2,
          3,
          4
        ],
        "type": "integer",
        "format": "int32"
      },
      "Environment": {
        "type": "object",
        "properties": {
          "platformEnvironmentId": {
            "type": "string",
            "nullable": true
          },
          "stackName": {
            "type": "string",
            "nullable": true
          },
          "displayName": {
            "type": "string",
            "nullable": true
          },
          "databaseName": {
            "type": "string",
            "nullable": true
          },
          "serverName": {
            "type": "string",
            "nullable": true
          },
          "serverDatabasePort": {
            "type": "integer",
            "format": "int32"
          },
          "username": {
            "type": "string",
            "nullable": true
          },
          "password": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "EnvironmentType": {
        "enum": [
          0,
          1,
          2
        ],
        "type": "integer",
        "format": "int32"
      },
      "ExtensionInstallRequestUpdate": {
        "type": "object",
        "properties": {
          "state": {
            "$ref": "#/components/schemas/ExtensionInstallState"
          },
          "message": {
            "type": "string",
            "nullable": true
          },
          "exception": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ExtensionInstallState": {
        "enum": [
          0,
          1,
          2,
          3
        ],
        "type": "integer",
        "format": "int32"
      },
      "ExtensionType": {
        "enum": [
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9
        ],
        "type": "integer",
        "format": "int32"
      },
      "JiraIssueComment": {
        "type": "object",
        "properties": {
          "ticketId": {
            "type": "string",
            "nullable": true
          },
          "id": {
            "type": "string",
            "nullable": true
          },
          "author": {
            "type": "string",
            "nullable": true
          },
          "authorIsServiceAccount": {
            "type": "boolean"
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "companyDisplayName": {
            "type": "string",
            "nullable": true
          },
          "body": {
            "type": "string",
            "nullable": true
          },
          "createdDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "updatedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "visibility": {
            "type": "string",
            "nullable": true
          },
          "allowUpdate": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "LogState": {
        "enum": [
          0,
          1,
          2,
          3
        ],
        "type": "integer",
        "format": "int32"
      },
      "Message": {
        "type": "object",
        "properties": {
          "messageId": {
            "type": "string",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "signature": {
            "type": "string",
            "nullable": true
          },
          "signatureVersion": {
            "type": "string",
            "nullable": true
          },
          "signingCertURL": {
            "type": "string",
            "nullable": true
          },
          "subscribeURL": {
            "type": "string",
            "nullable": true
          },
          "subject": {
            "type": "string",
            "nullable": true
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "token": {
            "type": "string",
            "nullable": true
          },
          "topicArn": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "type": "string",
            "nullable": true
          },
          "unsubscribeURL": {
            "type": "string",
            "nullable": true
          },
          "isSubscriptionType": {
            "type": "boolean",
            "readOnly": true
          },
          "isUnsubscriptionType": {
            "type": "boolean",
            "readOnly": true
          },
          "isNotificationType": {
            "type": "boolean",
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "NotificationSubscription": {
        "type": "object",
        "properties": {
          "notificationSubscriptionId": {
            "type": "integer",
            "format": "int32"
          },
          "notificationType": {
            "$ref": "#/components/schemas/NotificationType"
          },
          "enabled": {
            "type": "boolean"
          },
          "key": {
            "type": "string",
            "nullable": true
          },
          "userId": {
            "type": "string",
            "nullable": true
          },
          "user": {
            "$ref": "#/components/schemas/ApplicationUser"
          }
        },
        "additionalProperties": false
      },
      "NotificationType": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12,
          13,
          14,
          15,
          16,
          17,
          18
        ],
        "type": "integer",
        "format": "int32"
      },
      "PersonalAccessToken": {
        "required": [
          "note",
          "token",
          "userID"
        ],
        "type": "object",
        "properties": {
          "accessTokenID": {
            "type": "integer",
            "format": "int32"
          },
          "userID": {
            "minLength": 1,
            "type": "string"
          },
          "note": {
            "minLength": 1,
            "type": "string"
          },
          "lastUsed": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "token": {
            "minLength": 1,
            "type": "string"
          },
          "plaintextToken": {
            "type": "string",
            "nullable": true
          },
          "scopes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PersonalAccessTokenScope"
            },
            "nullable": true
          },
          "user": {
            "$ref": "#/components/schemas/ApplicationUser"
          }
        },
        "additionalProperties": false
      },
      "PersonalAccessTokenScope": {
        "type": "object",
        "properties": {
          "accessTokenID": {
            "type": "integer",
            "format": "int32"
          },
          "token": {
            "$ref": "#/components/schemas/PersonalAccessToken"
          },
          "scopeID": {
            "type": "string",
            "nullable": true
          },
          "scope": {
            "$ref": "#/components/schemas/Scope"
          }
        },
        "additionalProperties": false
      },
      "Project": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "path": {
            "type": "string",
            "nullable": true
          },
          "pathWithNamespace": {
            "type": "string",
            "nullable": true
          },
          "defaultBranch": {
            "type": "string",
            "nullable": true
          },
          "sshUrlToRepo": {
            "type": "string",
            "nullable": true
          },
          "httpUrlToRepo": {
            "type": "string",
            "nullable": true
          },
          "webUrl": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Quota": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "period": {
            "type": "string",
            "nullable": true
          },
          "remaining": {
            "type": "integer",
            "format": "int64"
          },
          "percentageRemaining": {
            "type": "number",
            "format": "float",
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "RoleScope": {
        "type": "object",
        "properties": {
          "roleId": {
            "type": "string",
            "nullable": true
          },
          "scopeId": {
            "type": "string",
            "nullable": true
          },
          "scope": {
            "$ref": "#/components/schemas/Scope"
          },
          "role": {
            "$ref": "#/components/schemas/ApplicationRole"
          }
        },
        "additionalProperties": false
      },
      "SandboxActionRequest": {
        "type": "object",
        "properties": {
          "uuxVersion": {
            "type": "string",
            "nullable": true
          },
          "baseTemplate": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SandboxConfig": {
        "type": "object",
        "properties": {
          "projects": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Project"
            },
            "nullable": true
          },
          "environments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Environment"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SaveSandboxYamlRequest": {
        "type": "object",
        "properties": {
          "yaml": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SaveTemplateYamlRequest": {
        "type": "object",
        "properties": {
          "yaml": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Scope": {
        "type": "object",
        "properties": {
          "concurrencyToken": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "descriptions": {
            "type": "string",
            "nullable": true
          },
          "displayName": {
            "type": "string",
            "nullable": true
          },
          "displayNames": {
            "type": "string",
            "nullable": true
          },
          "id": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "properties": {
            "type": "string",
            "nullable": true
          },
          "resources": {
            "type": "string",
            "nullable": true
          },
          "scopeClaims": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ScopeClaim"
            },
            "nullable": true
          },
          "prettyName": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "isEnvironmentScope": {
            "type": "boolean",
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "ScopeClaim": {
        "type": "object",
        "properties": {
          "scopeClaimID": {
            "type": "integer",
            "format": "int32"
          },
          "scopeID": {
            "type": "string",
            "nullable": true
          },
          "scope": {
            "$ref": "#/components/schemas/Scope"
          },
          "claimType": {
            "type": "string",
            "nullable": true
          },
          "claimValue": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TermsType": {
        "enum": [
          0,
          1,
          2,
          -1
        ],
        "type": "integer",
        "format": "int32"
      },
      "Throttle": {
        "type": "object",
        "properties": {
          "burstLimit": {
            "type": "integer",
            "format": "int32"
          },
          "rateLimit": {
            "type": "number",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "ValidateYamlRequest": {
        "type": "object",
        "properties": {
          "yaml": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "Bearer": {
        "type": "oauth2",
        "flows": {
          "password": {
            "tokenUrl": "/oauth2/token",
            "scopes": {
              "com.q2.portal.admin.group": "Admin group rights",
              "roles": "This gives access to user's roles.",
              "profile": "This gives access to user's profile.",
              "email": "This gives access to a user's email"
            }
          },
          "clientCredentials": {
            "authorizationUrl": "/oauth2/authorize",
            "tokenUrl": "/oauth2/token",
            "scopes": {
              "Portal:Logs:Update": "Allows updating a log request",
              "Portal:Portal:ExtensionInstall:Update": "Allows updating an extension install request",
              "Portal:Marketplace:Catalog": "This gives access to the marketplace catalog.",
              "Portal:Environments:Read": "Allows viewing and searching all environments. "
            }
          }
        }
      }
    }
  },
  "security": [
    {
      "Bearer": [ ]
    }
  ],
  "tags": [
    {
      "name": "AdminPlatformEnvironment"
    },
    {
      "name": "Antiforgery"
    },
    {
      "name": "AppExtensions"
    },
    {
      "name": "Applications"
    },
    {
      "name": "AppOrders"
    },
    {
      "name": "AwsSns"
    },
    {
      "name": "CaliperAPI"
    },
    {
      "name": "CaliperApiActivity"
    },
    {
      "name": "Catalog"
    },
    {
      "name": "Community"
    },
    {
      "name": "Companies"
    },
    {
      "name": "ContainerDeployments"
    },
    {
      "name": "EndUser"
    },
    {
      "name": "ExtensionInstall"
    },
    {
      "name": "GitLab"
    },
    {
      "name": "Jira"
    },
    {
      "name": "JiraWebhook"
    },
    {
      "name": "Log"
    },
    {
      "name": "OrcaTemplates"
    },
    {
      "name": "PlatformEnvironment"
    },
    {
      "name": "PlatformServices"
    },
    {
      "name": "Roles"
    },
    {
      "name": "SalesforceWebhook"
    },
    {
      "name": "Sandbox"
    },
    {
      "name": "SandboxActions"
    },
    {
      "name": "Scopes"
    },
    {
      "name": "Status"
    },
    {
      "name": "SupportHours"
    },
    {
      "name": "Vault"
    },
    {
      "name": "Version"
    }
  ]
}