OutSystems ODC Deployments API
REST endpoints for publishing and deploying assets across the environments (stages) in an OutSystems Developer Cloud organization, including rollback.
REST endpoints for publishing and deploying assets across the environments (stages) in an OutSystems Developer Cloud organization, including rollback.
{
"openapi": "3.0.3",
"info": {
"title": "Deployments API",
"description": "REST endpoints for publishing and deploying assets in environments (stages) in your organization.\n",
"version": "v1"
},
"servers": [
{
"url": "https://ODC_PORTAL_DOMAIN/api/deployments/v1",
"description": "Replace ODC_PORTAL_DOMAIN with the domain of your organization."
},
{
"url": "https://{odc-portal-domain}/api/deployments/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": {
"/deployment-operations": {
"get": {
"tags": [
"deployment-operations"
],
"summary": "Returns a list of deployments.",
"description": "Returns a list of deployments that match a given filter. Use query parameters to refine the search.\n\nAPI Client needs the **Stage > View stage** permission for the operation.",
"operationId": "DeploymentOperations_Filter",
"parameters": [
{
"name": "environmentKey",
"in": "query",
"description": "Filter by environment key, if filled.",
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "status",
"in": "query",
"description": "Filter by status of the deployment, if filled.",
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/Status"
}
]
}
},
{
"name": "assetKey",
"in": "query",
"description": "Filter deployments that contain given asset unique identifier, if filled.",
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "revision",
"in": "query",
"description": "Filter assets by revision number, if filled.",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "portfolioKey",
"in": "query",
"description": "Filter assets by portfolio key, if filled.",
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "operations",
"in": "query",
"description": "Filter deployments that contain a given operation, if filled.",
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DeploymentOperationsType"
}
}
},
{
"name": "createdDateSince",
"in": "query",
"description": "Filter assets created from one point in time on, if filled.",
"schema": {
"type": "string",
"format": "date-time"
}
},
{
"name": "createdDateTo",
"in": "query",
"description": "Filter assets created up to one point in time, if filled.",
"schema": {
"type": "string",
"format": "date-time"
}
},
{
"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.\nMultiple orders joined by comma.\nExample -element1,element2 to sort by element1 descending then by element2 ascending\nCurrently supported sort values: CreatedAt, UpdatedAt, ApplicationKey, AssetKey, ApplicationName, AssetName, FinishedAt\nDefault sort: -CreatedAt",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Int32NullableDeploymentOperationResponsePagedListResponse"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"429": {
"description": "Too Many Requests",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"x-os-permissions": "API Client needs the **Stage > View stage** permission for the operation."
},
"post": {
"tags": [
"deployment-operations"
],
"summary": "Requests the creation or deletion of a deployment.",
"description": "Requests the creation of a deployment-operation which can be a Deployment, Undeploy or ApplyConfigs. It returns the created deployment operation.\n\nAPI Client needs the **Release management > Deploy assets** permission for the operation.",
"operationId": "DeploymentOperations_Post",
"requestBody": {
"description": "Deployment operation request data",
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/DeploymentOperationRequest"
}
],
"description": "Deployment job request data"
}
},
"application/*+json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/DeploymentOperationRequest"
}
],
"description": "Deployment job request data"
}
}
},
"required": true
},
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DeploymentOperationResponse"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"429": {
"description": "Too Many Requests",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"x-os-permissions": "API Client needs the **Release management > Deploy assets** permission for the operation."
}
},
"/deployment-operations/{operationKey}": {
"get": {
"tags": [
"deployment-operations"
],
"summary": "Returns one deployment given the deployment operation key.",
"description": "Returns one deployment given the deployment operation key. If the deployment is not found, a 404 error is returned.\n\nAPI Client needs the **Stage > View stage** permission for the operation.",
"operationId": "DeploymentOperations_Get",
"parameters": [
{
"name": "operationKey",
"in": "path",
"description": "Deployment unique identifier",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DeploymentOperationResponse"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"429": {
"description": "Too Many Requests",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"x-os-permissions": "API Client needs the **Stage > View stage** permission for the operation."
}
},
"/deployment-operations/{operationKey}/messages": {
"get": {
"tags": [
"deployment-operations"
],
"summary": "Returns deployment log messages for a given deployment operation key.",
"description": "Returns deployment log messages for a given deployment operation key. If the deployment is not found, a 404 error is returned.\n\nAPI Client needs the **Stage > View stage** permission for the operation.",
"operationId": "DeploymentOperations_GetMessages",
"parameters": [
{
"name": "operationKey",
"in": "path",
"description": "Deployment unique identifier",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "limit",
"in": "query",
"description": "Limit of elements in the page.",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "offset",
"in": "query",
"description": "Offset from previous page. Don't fill if first page.",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StringMessageDetailsV1TaskProgressMessagePagedListResponse"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"429": {
"description": "Too Many Requests",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"x-os-permissions": "API Client needs the **Stage > View stage** permission for the operation."
}
},
"/publish-operations": {
"get": {
"tags": [
"publish-operations"
],
"summary": "Returns a list of publications that match a given filter.",
"description": "Returns a list of publications that match a given filter. Use query parameters to refine the search.\n\nAPI Client needs the **Stage > View stage** permission for the operation.",
"operationId": "PublishOperations_Filter",
"parameters": [
{
"name": "environmentKey",
"in": "query",
"description": "Filter by environment key, if filled.",
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "status",
"in": "query",
"description": "Filter by status, if filled.",
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/Status"
}
]
}
},
{
"name": "revision",
"in": "query",
"description": "Filter assets by revision number, if filled.",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "assetKey",
"in": "query",
"description": "Filter by Asset key, if filled.",
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "portfolioKey",
"in": "query",
"description": "Filter assets by portfolio key, if filled.",
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "createdDateSince",
"in": "query",
"description": "Filter assets created from one point in time on, if filled.",
"schema": {
"type": "string",
"format": "date-time"
}
},
{
"name": "createdDateTo",
"in": "query",
"description": "Filter assets created up to one point in time, if filled.",
"schema": {
"type": "string",
"format": "date-time"
}
},
{
"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.\nMultiple orders joined by comma.\nExample -element1,element2 to sort by element1 descending then by element2 ascending\nCurrently supported sort values: CreatedAt, UpdatedAt, ApplicationKey, AssetKey, ApplicationName, AssetName, FinishedAt\nDefault sort: -CreatedAt",
"schema": {
"type": "string"
}
}
],
"responses": {
"429": {
"description": "Too Many Requests",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Int32NullablePublishOperationResponsePagedListResponse"
}
}
}
}
},
"x-os-permissions": "API Client needs the **Stage > View stage** permission for the operation."
},
"post": {
"tags": [
"publish-operations"
],
"summary": "Requests the creation of a new publication.",
"description": "Requests the creation of a publish-operation. It returns the created publication operation.\n\nAPI Client needs the **Asset management > Change** permission for the operation.",
"operationId": "PublishOperations_Post",
"requestBody": {
"description": "Publish operation request data",
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/PublishOperationRequest"
}
]
}
},
"application/*+json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/PublishOperationRequest"
}
]
}
}
}
},
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PublishOperationResponse"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"429": {
"description": "Too Many Requests",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"x-os-permissions": "API Client needs the **Asset management > Change** permission for the operation."
}
},
"/publish-operations/{operationKey}": {
"get": {
"tags": [
"publish-operations"
],
"summary": "Return a publication by its operation key.",
"description": "Returns a publication by its operation key. If the publication is not found, a 404 error is returned.\n\nAPI Client needs the **Stage > View stage** permission for the operation.",
"operationId": "PublishOperations_Get",
"parameters": [
{
"name": "operationKey",
"in": "path",
"description": "Publication key",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PublishOperationResponse"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"429": {
"description": "Too Many Requests",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"x-os-permissions": "API Client needs the **Stage > View stage** permission for the operation."
}
},
"/publish-operations/{operationKey}/messages": {
"get": {
"tags": [
"publish-operations"
],
"summary": "Returns publication log messages for a given publication operation key.",
"description": "Returns publication log messages for a given publication operation key. If the publication is not found, a 404 error is returned.\n\nAPI Client needs the **Stage > View stage** permission for the operation.",
"operationId": "PublishOperations_GetMessages",
"parameters": [
{
"name": "operationKey",
"in": "path",
"description": "Publication unique identifier",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "limit",
"in": "query",
"description": "Limit of elements in the page.",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "offset",
"in": "query",
"description": "Offset from previous page. Don't fill if first page.",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StringMessageDetailsV1TaskProgressMessagePagedListResponse"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"429": {
"description": "Too Many Requests",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"x-os-permissions": "API Client needs the **Stage > View stage** permission for the operation."
}
}
},
"components": {
"schemas": {
"DeploymentOperationRequest": {
"type": "object",
"properties": {
"operation": {
"allOf": [
{
"$ref": "#/components/schemas/DeploymentOperationsType"
}
],
"description": "Operation to be executed.\nMandatory: Deploy, Undeploy, ApplyConfigs."
},
"assetKey": {
"type": "string",
"description": "Asset unique identifier.\nMandatory for Apply Configurations and Deployment.",
"format": "uuid"
},
"buildKey": {
"type": "string",
"description": "Build unique identifier.\nMandatory for Deployment.",
"format": "uuid",
"nullable": true
},
"revision": {
"type": "integer",
"description": "Revision identifier.\nMandatory for Apply Configurations and Deployment.",
"format": "int32",
"nullable": true
},
"environmentKey": {
"type": "string",
"description": "Environment Identifier.\nMandatory.",
"format": "uuid"
}
},
"additionalProperties": false,
"description": "Deployment job request data"
},
"DeploymentOperationResponse": {
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "Unique identifier of the deployment-operation.",
"format": "uuid"
},
"status": {
"allOf": [
{
"$ref": "#/components/schemas/Status"
}
],
"description": "Deployment-operation status."
},
"startedDateTime": {
"type": "string",
"description": "When the deployment-operation started.",
"format": "date-time"
},
"finishedDateTime": {
"type": "string",
"description": "When the deployment-operation finished.",
"format": "date-time"
},
"deployedBy": {
"type": "string",
"description": "Unique identifier of the requesting subject.",
"nullable": true
},
"assetKey": {
"type": "string",
"description": "Unique identifier of the asset.",
"format": "uuid"
},
"revisions": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
},
"description": "List of revisions that had the action performed.",
"nullable": true
},
"buildKey": {
"type": "string",
"description": "Unique identifier of the asset build.",
"format": "uuid",
"nullable": true
},
"assetName": {
"type": "string",
"description": "Asset name.",
"nullable": true
},
"operation": {
"allOf": [
{
"$ref": "#/components/schemas/DeploymentOperationsType"
}
],
"description": "Executed Operation."
},
"portfolioKey": {
"type": "string",
"description": "Portfolio Key.",
"format": "uuid",
"nullable": true
}
},
"additionalProperties": false,
"description": "Information about one deployment"
},
"DeploymentOperationsType": {
"enum": [
"Deploy",
"Undeploy",
"ApplyConfigs"
],
"type": "string"
},
"Int32NullableDeploymentOperationResponsePagedListResponse": {
"type": "object",
"properties": {
"page": {
"allOf": [
{
"$ref": "#/components/schemas/Int32NullablePageInfo"
}
],
"description": "Page information.",
"nullable": true,
"readOnly": true
},
"results": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DeploymentOperationResponse"
},
"description": "List of results.",
"nullable": true,
"readOnly": true
}
},
"additionalProperties": false,
"description": "Represents a response containing a paged set of results."
},
"Int32NullablePageInfo": {
"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",
"nullable": true
},
"nextPageOffset": {
"type": "integer",
"description": "Offset of the next page of results.",
"format": "int32",
"nullable": true
}
},
"additionalProperties": false,
"description": "Contains response page information."
},
"Int32NullablePublishOperationResponsePagedListResponse": {
"type": "object",
"properties": {
"page": {
"allOf": [
{
"$ref": "#/components/schemas/Int32NullablePageInfo"
}
],
"description": "Page information.",
"nullable": true,
"readOnly": true
},
"results": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PublishOperationResponse"
},
"description": "List of results.",
"nullable": true,
"readOnly": true
}
},
"additionalProperties": false,
"description": "Represents a response containing a paged set of results."
},
"MessageDetailsV1": {
"type": "object",
"properties": {
"stepId": {
"type": "string",
"description": "Step unique identifier.",
"nullable": true
},
"assetKey": {
"type": "string",
"description": "Asset unique identifier.",
"format": "uuid",
"nullable": true
}
},
"additionalProperties": false,
# --- truncated at 32 KB (40 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/outsystems/refs/heads/main/openapi/outsystems-deployments-api-v1-openapi.json