OutSystems ODC Native Mobile Build API
REST endpoints for building and managing native iOS and Android mobile application packages, build versions, validation and extensibility settings.
REST endpoints for building and managing native iOS and Android mobile application packages, build versions, validation and extensibility settings.
{
"openapi": "3.0.3",
"info": {
"title": "Native Mobile Build API",
"description": "API for building and managing native mobile applications.\n",
"version": "v1"
},
"servers": [
{
"url": "https://ODC_PORTAL_DOMAIN/api/native-mobile-builds/v1",
"description": "Replace ODC_PORTAL_DOMAIN with the domain of your organization."
},
{
"url": "https://{odc-portal-domain}/api/native-mobile-builds/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": {
"/build-operations/{operationKey}": {
"get": {
"tags": [
"BuildOperations"
],
"summary": "Returns the details for a given build operation",
"description": "The build operation key is generated when the build operation is created and returned in the response of the create API.\nIt can also be obtained through the list API.\n\nRate Limit: 100 requests per minute\n\nAPI Client needs the **Stage > View stage** permission.",
"operationId": "GET_BuildOperations_Get",
"parameters": [
{
"name": "environmentKey",
"in": "query",
"description": "Environment key",
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "applicationKey",
"in": "query",
"description": "Application key",
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "operationKey",
"in": "path",
"description": "Build operation key",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "The details of the build operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BuildOperationResult"
}
}
}
},
"400": {
"description": "Request is malformed.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Not authorized to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"403": {
"description": "Insufficient permissions to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "The specified environment, application or build operation was not found.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"429": {
"description": "Too many requests. The rate limit for the API has been exceeded. \nRate Limit: 100 requests per minute",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"x-os-permissions": "API Client needs the **Stage > View stage** permission."
}
},
"/build-operations/{operationKey}/log-messages": {
"get": {
"tags": [
"BuildOperations"
],
"summary": "Returns the progress messages for a given native build",
"description": "Progress messages provide step-by-step status updates on the build process. Supports pagination via limit and offset parameters.\n\nRate Limit: 100 requests per minute\n\nAPI Client needs the **Stage > View stage** permission.",
"operationId": "GET_BuildOperations_GetMessages",
"parameters": [
{
"name": "operationKey",
"in": "path",
"description": "Native build key",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "environmentKey",
"in": "query",
"description": "Environment key",
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "applicationKey",
"in": "query",
"description": "Application key",
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"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": "limit",
"in": "query",
"description": "Max number of elements that should be returned in a single page.",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "The list of progress messages for the native build operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Int32TaskProgressMessagePagedListResponse"
}
}
}
},
"401": {
"description": "Not authorized to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"403": {
"description": "Insufficient permissions to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "The specified environment, application or build operation was not found.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"429": {
"description": "Too many requests. The rate limit for the API has been exceeded. \nRate Limit: 100 requests per minute",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request is malformed."
}
},
"x-os-permissions": "API Client needs the **Stage > View stage** permission."
}
},
"/build-operations": {
"get": {
"tags": [
"BuildOperations"
],
"summary": "Lists all build operations for filtering criteria",
"description": "Results can optionally be filtered by build status, platform, or revision. Supports pagination via limit and offset parameters.\n\nRate Limit: 100 requests per minute\n\nAPI Client needs the **Stage > View stage** permission.",
"operationId": "GET_BuildOperations_List",
"parameters": [
{
"name": "environmentKey",
"in": "query",
"description": "Environment key",
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "applicationKey",
"in": "query",
"description": "Application key",
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "mobilePlatform",
"in": "query",
"description": "Filter by mobile platform type, if filled.",
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/MobilePlatform"
}
]
}
},
{
"name": "revision",
"in": "query",
"description": "Filter by revision number, if filled.",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "status",
"in": "query",
"description": "Filter by status of the build, if filled.",
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/BuildStatus"
}
]
}
},
{
"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": "limit",
"in": "query",
"description": "Max number of elements that should be returned in a single page.",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "The list of build operations matching the filtering criteria.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BuildOperationResultPagedListResponse"
}
}
}
},
"400": {
"description": "Request is malformed.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Not authorized to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"403": {
"description": "Insufficient permissions to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"429": {
"description": "Too many requests. The rate limit for the API has been exceeded. \nRate Limit: 100 requests per minute",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"x-os-permissions": "API Client needs the **Stage > View stage** permission."
},
"post": {
"tags": [
"BuildOperations"
],
"summary": "Starts a new native build",
"description": "This is an asynchronous operation. The response contains the details of the created build operation, including its\ngenerated key, which can be used to query the operation status and details through other APIs.\n\nRate Limit: 5 requests per minute\n\nAPI Client needs the **Release management > Deploy assets** permission.",
"operationId": "POST_BuildOperations_Post",
"requestBody": {
"description": "Details of the build operation request",
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/BuildOperationRequest"
}
],
"description": "Build operation request"
}
},
"application/*+json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/BuildOperationRequest"
}
],
"description": "Build operation request"
}
}
}
},
"responses": {
"201": {
"description": "The native build operation was created successfully. The response contains the details of the created build operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BuildOperationResult"
}
}
}
},
"401": {
"description": "Not authorized to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"403": {
"description": "Insufficient permissions to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "The specified environment or application was not found.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"429": {
"description": "Too many requests. The rate limit for the API has been exceeded. \nRate Limit: 100 requests per minute",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"x-os-permissions": "API Client needs the **Release management > Deploy assets** permission."
}
},
"/build-operations/version-suggestions": {
"post": {
"tags": [
"BuildOperations"
],
"summary": "Returns the suggested versions of the next build for the request platform(s)",
"description": "Provides both the version number and version code for the next build. If no platform is specified, suggestions are returned for both iOS and Android.\n\nRate Limit: 5 requests per minute\n\nAPI Client needs the **Stage > View stage** permission.",
"operationId": "POST_BuildOperations_PostVersionSuggestions",
"requestBody": {
"description": "Details of the version suggestion request. See OutSystems.NativeApplicationOrchestration.Contracts.V1.Models.Public.VersionSuggestionsRequest",
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/VersionSuggestionsRequest"
}
],
"description": "Version suggestions request"
}
},
"application/*+json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/VersionSuggestionsRequest"
}
],
"description": "Version suggestions request"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "The suggested version number and version code of the next native build for the given environment key, application key and platform.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"Android": {
"$ref": "#/components/schemas/NativeBuildVersions"
},
"iOS": {
"$ref": "#/components/schemas/NativeBuildVersions"
}
},
"additionalProperties": false
}
}
}
},
"401": {
"description": "Not authorized to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"403": {
"description": "Insufficient permissions to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "The specified environment or application was not found.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"429": {
"description": "Too many requests. The rate limit for the API has been exceeded. \nRate Limit: 5 requests per minute",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"400": {
"description": "Request is malformed."
}
},
"x-os-permissions": "API Client needs the **Stage > View stage** permission."
}
},
"/build-operations/native-build-validation": {
"post": {
"tags": [
"BuildOperations"
],
"summary": "Check if a new native build is needed for one or all platforms",
"description": "Results indicate whether the current build artifacts are up to date or if a rebuild is required. If no platform is specified, validation is performed for both iOS and Android.\n\nRate Limit: 5 requests per minute\n\nAPI Client needs the **Stage > View stage** permission.",
"operationId": "POST_BuildOperations_ValidateNativeBuild",
"requestBody": {
"description": "Details of the native build validation request",
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/BuildOperationValidationRequest"
}
],
"description": "Native build validation request for public API"
}
},
"application/*+json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/BuildOperationValidationRequest"
}
],
"description": "Native build validation request for public API"
}
}
}
},
"responses": {
"200": {
"description": "The validation results for the given build key, revision and platform.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BuildOperationValidationResponse"
}
}
}
},
"400": {
"description": "Request is malformed.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"401": {
"description": "Not authorized to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"403": {
"description": "Insufficient permissions to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "The specified environment or application was not found.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"429": {
"description": "Too many requests. The rate limit for the API has been exceeded. \nRate Limit: 5 requests per minute",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"x-os-permissions": "API Client needs the **Stage > View stage** permission."
}
},
"/environments/{environmentKey}/applications/{applicationKey}/configurations/android": {
"get": {
"tags": [
"NativeMobileConfigurations"
],
"summary": "Returns the deployed platform-specific native configuration for a given Android application",
"description": "The response includes all the necessary information to build and deploy an Android native mobile application,\nsuch as keystore files and other related configurations.\n\nRate Limit: 100 requests per minute\n\nAPI Client needs the **Configuration management > View configurations** permission.",
"operationId": "GET_NativeBuildConfigurations_GetAndroidMobileConfiguration",
"parameters": [
{
"name": "environmentKey",
"in": "path",
"description": "Environment key",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "applicationKey",
"in": "path",
"description": "Application key",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "Android configuration details.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AndroidBuildConfigurationResult"
}
}
}
},
"401": {
"description": "Not authorized to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "The specified environment or application does not exist, or there is no mobile configuration deployed for the specified application.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"429": {
"description": "Too Many Requests. The rate limit for viewing mobile configurations has been exceeded. \nRate Limit: 100 requests per minute",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"x-os-permissions": "API Client needs the **Configuration management > View configurations** permission."
},
"patch": {
"tags": [
"NativeMobileConfigurations"
],
"summary": "Updates the Native Mobile Configuration for Android Applications",
"description": "Allows modifying keystore files and other related settings required for building and deploying the application.\nOnly the fields provided in the request body are updated; omitted fields remain unchanged.\n\nRate Limit: 10 requests per minute\n\nAPI Client needs the **Configuration management > Edit asset configurations** permission.",
"operationId": "PATCH_NativeBuildConfigurations_UpdateMobileAndroidConfiguration",
"parameters": [
{
"name": "environmentKey",
"in": "path",
"description": "Environment key",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "applicationKey",
"in": "path",
"description": "Application key",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"requestBody": {
"description": "Mobile Configuration update payload",
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/AndroidBuildConfigurationRequest"
}
],
"description": "Result payload model for native Android Build configurations"
}
},
"application/*+json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/AndroidBuildConfigurationRequest"
}
],
"description": "Result payload model for native Android Build configurations"
}
}
},
"required": true
},
"responses": {
"204": {
"description": "Mobile configuration updated successfully."
},
"401": {
"description": "Not authorized to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "The specified environment or application does not exist, or there is no mobile configuration deployed for the specified application.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"429": {
"description": "Too Many Requests. The rate limit for editing mobile configurations has been exceeded. \nRate Limit: 10 requests per minute",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"x-os-permissions": "API Client needs the **Configuration management > Edit asset configurations** permission."
}
},
"/environments/{environmentKey}/applications/{applicationKey}/configurations/ios": {
"get": {
"tags": [
"NativeMobileConfigurations"
],
"summary": "Returns the deployed native configuration for a given iOS application",
"description": "The response includes all the necessary information to build and deploy an iOS native mobile application,\nsuch as certificates, provisioning profiles, and other related configurations.\n\nRate Limit: 100 requests per minute\n\nAPI Client needs the **Configuration management > View configurations** permission.",
"operationId": "GET_NativeBuildConfigurations_GetIosMobileConfiguration",
"parameters": [
{
"name": "environmentKey",
"in": "path",
"description": "Environment key",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "applicationKey",
"in": "path",
"description": "Application key",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "iOS configuration details.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/IosBuildConfigurationResult"
}
}
}
},
"401": {
"description": "Not authorized to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "The specified environment or application does not exist, or there is no mobile configuration deployed for the specified application.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"429": {
"description": "Too Many Requests. The rate limit for viewing mobile configurations has been exceeded. \nRate Limit: 100 requests per minute",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
},
"x-os-permissions": "API Client needs the **Configuration management > View configurations** permission."
},
"patch": {
"tags": [
"NativeMobileConfigurations"
],
"summary": "Updates the Native Mobile Configuration for iOS Applications",
"description": "Allows modifying certificates, provisioning profiles, and other related settings required for building and deploying the application.\nOnly the fields provided in the request body are updated; omitted fields remain unchanged.\n\nRate Limit: 10 requests per minute\n\nAPI Client needs the **Configuration management > Edit asset configurations** permission.",
"operationId": "PATCH_NativeBuildConfigurations_UpdateMobileIosConfiguration",
"parameters": [
{
"name": "environmentKey",
"in": "path",
"description": "Environment key",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "applicationKey",
"in": "path",
"description": "Application key",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"requestBody": {
# --- truncated at 32 KB (86 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/outsystems/refs/heads/main/openapi/outsystems-native-application-orchestration-service-api-v1-openapi.json