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.

OpenAPI Specification

outsystems-portfolio-api-v1-openapi.json Raw ↑
{
  "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"
    }
  ]
}