OutSystems ODC Portfolio API (v1)
Version 1 of the ODC Portfolio API, superseded by v2. REST endpoints for retrieving information about assets and environments in your organization.
Version 1 of the ODC Portfolio API, superseded by v2. REST endpoints for retrieving information about assets and environments in your organization.
{
"openapi": "3.0.3",
"info": {
"title": "Portfolio API",
"description": "REST endpoints for retrieving information about assets and environments in your organization.\n",
"version": "v1"
},
"servers": [
{
"url": "https://ODC_PORTAL_DOMAIN/api/portfolios/v1",
"description": "Replace ODC_PORTAL_DOMAIN with the domain of your organization."
},
{
"url": "https://{odc-portal-domain}/api/portfolios/v1",
"description": "Replace {odc-portal-domain} with the domain of your organization.",
"variables": {
"odc-portal-domain": {
"default": "ODC_PORTAL_DOMAIN",
"description": "The domain of your organization"
}
}
}
],
"paths": {
"/deployed-assets": {
"get": {
"tags": [
"deployed-assets"
],
"summary": "Retrieves a list of deployed assets.",
"description": "Retrieves a list of deployed assets containing updated deployment status per environment (stage).\nDeprecated since 2026-07-08. Use GET /portfolios/v2/deployed-assets instead.\nThis endpoint will be removed on or after 2027-01-08.\n\nThe result only shows assets in environments (stages) for which the API Client has **Stage > View stage** permission.",
"operationId": "DeployedAssets_ListAssets",
"parameters": [
{
"name": "environmentKey",
"in": "query",
"description": "Environment key on which to filter, comma separated.",
"schema": {
"type": "string"
}
},
{
"name": "key",
"in": "query",
"description": "Asset keys on which to filter, comma separated.",
"schema": {
"type": "string"
}
},
{
"name": "type",
"in": "query",
"description": "Asset types on which to filter, comma separated. Available values: WebApplication, MobileApplication, Workflow, Agent.",
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
{
"name": "nameContains",
"in": "query",
"description": "Filter by matching on the name, case-insensitive.",
"schema": {
"type": "string"
}
},
{
"name": "permissionFilter",
"in": "query",
"description": "Filter by permission type. Format: 'PermissionType' or 'PermissionType.EnvironmentKey' for environment-specific permissions. Available values: AppViewSourceCode | AppDebug | AppChange | AppDelete | AppDeploy | AppRelease | AppMonitor | AppMonitorUserInfo | AppSecurityView | CodeQualityManage | CodeQualityView | AppUserView | AppAccessManage | AppGroupManage | CfgView | ConnConfig | AppCfgChange. Example: 'AppDeploy' or 'AppDeploy.123e4567-e89b-12d3-a456-426614174000'",
"schema": {
"type": "string"
}
},
{
"name": "limit",
"in": "query",
"description": "Max number of elements that should be returned in a single page.",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "offset",
"in": "query",
"description": "Offset of the last page, to get the following page with the same filters applied.",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "sort",
"in": "query",
"description": "Sort order of the elements.\n-element1 for descending, element2 for ascending.\nFor nested sorting, the format is element1[key].element2 .\nMultiple orders joined by comma.\nExample: -element1,element2 to sort by element1 descending then by element2 ascending.\nSupported values for first order sorting: deployments (nested).\nFor nested sorting: deploymentDateTime.\nExample: deployments[environmentkey].deploymentDatetime .\nAttention: the sorting only applies to the assets, not to the deployments.\nThe deployments will always be sorted by the DeploymentDatetime, descending.",
"schema": {
"type": "string"
}
}
],
"responses": {
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"422": {
"description": "Unprocessable Content",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"429": {
"description": "Too Many Requests",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DeployedAssetPagedListResponse"
}
}
}
}
},
"deprecated": true,
"x-os-permissions": "The result only shows assets in environments (stages) for which the API Client has **Stage > View stage** permission."
}
},
"/environments": {
"get": {
"tags": [
"environments"
],
"summary": "Retrieves the list of environments (stages).",
"description": "Deprecated since 2026-07-08. Use GET /portfolios/v2/environments instead. Note that V2's\nEnvironmentsController does not use the in-memory response caching this V1 endpoint has.\nThis endpoint will be removed on or after 2027-01-08.\n\nThe result only shows environments (stages) for which the API Client has **Stage > View stage** permission.",
"operationId": "Environments_ListEnvironments",
"responses": {
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"429": {
"description": "Too Many Requests",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/EnvironmentListResponse"
}
}
}
}
},
"deprecated": true,
"x-os-permissions": "The result only shows environments (stages) for which the API Client has **Stage > View stage** permission."
}
}
},
"components": {
"schemas": {
"DeployedAsset": {
"required": [
"type"
],
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "The type of asset (WebApplication, MobileApplication, Workflow).",
"nullable": true
},
"key": {
"type": "string",
"description": "The asset key.",
"format": "uuid"
},
"isBuiltIn": {
"type": "boolean",
"description": "Whether the asset is built-in."
},
"deployments": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Deployment"
},
"description": "Where the asset is deployed and its details.",
"nullable": true
}
},
"additionalProperties": false,
"description": "Deployed asset"
},
"DeployedAssetPagedListResponse": {
"type": "object",
"properties": {
"page": {
"allOf": [
{
"$ref": "#/components/schemas/PageInfoWithTotals"
}
],
"description": "Page information.",
"nullable": true,
"readOnly": true
},
"results": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DeployedAsset"
},
"description": "List of results.",
"nullable": true,
"readOnly": true
}
},
"additionalProperties": false,
"description": "Represents a response containing a paged set of results."
},
"Deployment": {
"required": [
"buildKey",
"deploymentDateTime",
"deploymentKey",
"deploymentUserId",
"description",
"environmentKey",
"iconUrl",
"name",
"revision",
"tag",
"taggingDateTime",
"taggingUserKey",
"url"
],
"type": "object",
"properties": {
"environmentKey": {
"type": "string",
"description": "The environment key in which the asset is deployed.",
"format": "uuid"
},
"name": {
"type": "string",
"description": "The asset name.",
"nullable": true
},
"revision": {
"type": "integer",
"description": "The asset revision.",
"format": "int32"
},
"buildKey": {
"type": "string",
"description": "The asset build key.",
"format": "uuid"
},
"deploymentKey": {
"type": "string",
"description": "The deployment key.",
"format": "uuid"
},
"deploymentDateTime": {
"type": "string",
"description": "The date at which the deployment occurred.",
"format": "date-time"
},
"description": {
"type": "string",
"description": "The description of the asset.",
"nullable": true
},
"iconUrl": {
"type": "string",
"description": "The icon of the asset.",
"nullable": true
},
"deploymentUserId": {
"type": "string",
"description": "The id of the user that did the deployment.",
"nullable": true
},
"url": {
"type": "string",
"description": "The url for the deployment.",
"nullable": true
},
"tag": {
"type": "string",
"description": "The tag for this revision of the asset.",
"nullable": true
},
"taggingUserKey": {
"type": "string",
"description": "The id of the user that tagged the asset.",
"nullable": true
},
"taggingDateTime": {
"type": "string",
"description": "The date at which the asset was tagged.",
"format": "date-time",
"nullable": true
}
},
"additionalProperties": false,
"description": "Deployment instance"
},
"Environment": {
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "The environment key.",
"nullable": true
},
"name": {
"type": "string",
"description": "The environment name.",
"nullable": true
},
"hostname": {
"type": "string",
"description": "The built-in environment hostname.",
"nullable": true
},
"purpose": {
"allOf": [
{
"$ref": "#/components/schemas/EnvironmentPurpose"
}
],
"description": "The environment purpose."
},
"order": {
"type": "integer",
"description": "The environment order.",
"format": "int32"
},
"region": {
"type": "string",
"description": "The environment region.",
"nullable": true
},
"hosting": {
"type": "string",
"description": "The hosting type (oscloud, selfhosted).",
"nullable": true
},
"isConfigured": {
"type": "boolean",
"description": "If is selfhosted and configured."
},
"isDeployedToCluster": {
"type": "boolean",
"description": "If is deployed on the cluster."
}
},
"additionalProperties": false,
"description": "Environment"
},
"EnvironmentListResponse": {
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Environment"
},
"description": "List of results.",
"nullable": true
}
},
"additionalProperties": false,
"description": "Represents a response containing a list of results."
},
"EnvironmentPurpose": {
"enum": [
"Development",
"NonProduction",
"Production",
"Unknown"
],
"type": "string"
},
"PageInfoWithTotals": {
"type": "object",
"properties": {
"count": {
"type": "integer",
"description": "Number of results in the current page.",
"format": "int32"
},
"limit": {
"type": "integer",
"description": "Limit of results per page.",
"format": "int32"
},
"offset": {
"type": "integer",
"description": "Offset of the current page of results.",
"format": "int32"
},
"nextPageOffset": {
"type": "integer",
"description": "Offset of the next page of results. Null when there is no next page.",
"format": "int32",
"nullable": true
},
"totalResults": {
"type": "integer",
"description": "Total of results.",
"format": "int32"
},
"totalPages": {
"type": "integer",
"description": "Total of result pages.",
"format": "int32",
"readOnly": true
}
},
"additionalProperties": false,
"description": "Contains response page information including totals."
},
"ProblemDetails": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "A URI reference that identifies the problem type.",
"nullable": true
},
"title": {
"type": "string",
"description": "A short, human-readable summary of the problem.",
"nullable": true
},
"status": {
"type": "integer",
"description": "The HTTP status code applicable to the problem.",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"description": "A human-readable explanation of the error.",
"nullable": true
},
"instance": {
"type": "string",
"description": "A URI that identifies the specific occurrence of the problem.",
"nullable": true
},
"traceId": {
"type": "string",
"description": "This field helps OutSystems support to track and investigate specific error occurrences. Providing this identifier when reporting an issue allows for more precise and faster troubleshooting."
},
"errorCode": {
"type": "string",
"description": "This error code serves the purpose to communicate with OutSystems Support and help diagonose errors."
}
},
"description": "A standardized error response as per RFC 7807 (Problem Details for HTTP APIs)."
}
},
"securitySchemes": {
"bearerAuth": {
"type": "http",
"description": "Enter your bearer token in the format 'Bearer {token}'",
"scheme": "bearer",
"bearerFormat": "JWT"
}
}
},
"security": [
{
"bearerAuth": []
}
],
"tags": [
{
"name": "public",
"description": ""
},
{
"name": "deployed-assets"
},
{
"name": "environments"
}
]
}